Several changes:
* Added a user notes field to the checkout page * Added user suggestions to the checkout page * Refactored suggestion generation * Proper pluralization on reminder emails * Improved the feedback message when returning a product
This commit is contained in:
parent
f26e281b9c
commit
2aee184390
23
cron.php
23
cron.php
@ -37,12 +37,12 @@ class Cron {
|
||||
}
|
||||
|
||||
private function send_reminder($user, $loans) {
|
||||
$subject_template = "DMC Helpdesk: Du har ¤count¤ försenade lån";
|
||||
$subject_template = "DSV Helpdesk: Du har ¤count¤ ¤late¤ lån";
|
||||
$reminder_template = "¤name¤, försenad sedan ¤due¤\n";
|
||||
$message_template = <<<EOF
|
||||
Hej ¤name¤
|
||||
|
||||
Vi vill påminna dig om att ditt lån av följande artiklar har gått ut:
|
||||
Vi vill påminna dig om att ditt lån av följande ¤product¤ har gått ut:
|
||||
|
||||
¤list¤
|
||||
|
||||
@ -50,22 +50,30 @@ Vänligen återlämna dem till Helpdesk så snart som möjligt, alternativt kont
|
||||
oss för att få lånet förlängt.
|
||||
|
||||
Mvh
|
||||
DMC Helpdesk
|
||||
DSV Helpdesk
|
||||
helpdesk@dsv.su.se
|
||||
08 - 16 16 48
|
||||
EOF;
|
||||
|
||||
$overdue_count = count($loans);
|
||||
$reminder_list = '';
|
||||
$late = 'försenat';
|
||||
$product = 'artikel';
|
||||
if($count > 1) {
|
||||
$late = 'försenade';
|
||||
$product = 'artiklar';
|
||||
}
|
||||
foreach($loans as $loan) {
|
||||
$replacements = array('name' => $loan->get_product()->get_name(),
|
||||
'due' => $loan->get_duration()['end']);
|
||||
$reminder_list .= replace($replacements, $reminder_template);
|
||||
}
|
||||
|
||||
$subject = replace(array('count' => $overdue_count), $subject_template);
|
||||
$message = replace(array('name' => $user->get_displayname(),
|
||||
'list' => $reminder_list), $message_template);
|
||||
$subject = replace(array('count' => $overdue_count,
|
||||
'late' => $late), $subject_template);
|
||||
$message = replace(array('name' => $user->get_displayname(),
|
||||
'list' => $reminder_list,
|
||||
'product' => $product), $message_template);
|
||||
|
||||
try {
|
||||
mb_send_mail($user->get_email(),
|
||||
@ -75,7 +83,8 @@ EOF;
|
||||
} catch(Exception $e) {
|
||||
mb_send_mail('root@dsv.su.se',
|
||||
"Kunde inte skicka påminnelse",
|
||||
"Påminnelse kunde inte skickas till ".$user->get_name());
|
||||
"Påminnelse kunde inte skickas till "
|
||||
.$user->get_name());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -403,6 +403,7 @@
|
||||
<form class="dark"
|
||||
action="./"
|
||||
method="GET">
|
||||
<datalist id="userlist"></datalist>
|
||||
<input type="hidden"
|
||||
name="page"
|
||||
value="checkout" />
|
||||
@ -410,8 +411,11 @@
|
||||
<span class="label">
|
||||
Användarnamn:
|
||||
</span>
|
||||
<input type="text"
|
||||
<input onFocus="JavaScript:suggest(this, 'user')"
|
||||
type="text"
|
||||
name="user"
|
||||
list="userlist"
|
||||
autocomplete="off"
|
||||
placeholder="Användarnamn"
|
||||
value="¤user¤"
|
||||
required />
|
||||
@ -428,6 +432,13 @@
|
||||
value="¤displayname¤"
|
||||
disabled />
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">
|
||||
Anteckningar:
|
||||
</span>
|
||||
<textarea name="notes"
|
||||
disabled>¤notes¤</textarea>
|
||||
</div>
|
||||
</form>
|
||||
<h2>Låna ut artikel</h2>
|
||||
<form class="light"
|
||||
|
@ -83,42 +83,39 @@ function get_items($type) {
|
||||
return $list;
|
||||
}
|
||||
|
||||
function get_tags() {
|
||||
$search = prepare(
|
||||
'(select `tag` from `product_tag`)
|
||||
union
|
||||
(select `tag` from `template_tag`)
|
||||
order by `tag`'
|
||||
);
|
||||
execute($search);
|
||||
$out = array();
|
||||
foreach(result_list($search) as $row) {
|
||||
$out[] = $row['tag'];
|
||||
function suggest($type) {
|
||||
$search = '';
|
||||
$typename = 'name';
|
||||
switch($type) {
|
||||
case 'user':
|
||||
$search = prepare('select `name` from `user` order by `name`');
|
||||
break;
|
||||
case 'template':
|
||||
$search = prepare('select `name` from `template` order by `name`');
|
||||
break;
|
||||
case 'tag':
|
||||
$search = prepare(
|
||||
'(select `tag` from `product_tag`)
|
||||
union
|
||||
(select `tag` from `template_tag`)
|
||||
order by `tag`');
|
||||
$typename = 'tag';
|
||||
break;
|
||||
case 'field':
|
||||
$search = prepare(
|
||||
'(select `field` from `product_info`)
|
||||
union
|
||||
(select `field` from `template_info`)
|
||||
order by `field`');
|
||||
$typename = 'field';
|
||||
break;
|
||||
default:
|
||||
return array();
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
function get_fields() {
|
||||
$search = prepare(
|
||||
'(select `field` from `product_info`)
|
||||
union
|
||||
(select `field` from `template_info`)
|
||||
order by `field`'
|
||||
);
|
||||
execute($search);
|
||||
$out = array();
|
||||
foreach(result_list($search) as $row) {
|
||||
$out[] = $row['field'];
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
function get_templates() {
|
||||
$search = prepare('select `name` from `template` order by `name`');
|
||||
execute($search);
|
||||
$out = array();
|
||||
foreach(result_list($search) as $row) {
|
||||
$out[] = $row['name'];
|
||||
$out[] = $row[$typename];
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ abstract class Page extends Responder {
|
||||
protected abstract function render_body();
|
||||
|
||||
protected $page = 'checkout';
|
||||
protected $title = "Boka2";
|
||||
protected $title = "DSV Utlåning";
|
||||
protected $subtitle = '';
|
||||
protected $error = null;
|
||||
protected $menuitems = array('checkout' => 'Låna',
|
||||
@ -666,12 +666,14 @@ class CheckoutPage extends Page {
|
||||
protected function render_body() {
|
||||
$username = '';
|
||||
$displayname = '';
|
||||
$notes = '';
|
||||
$loan_table = '';
|
||||
$subhead = '';
|
||||
$enddate = gmdate('Y-m-d', time() + 604800); # 1 week from now
|
||||
if($this->user !== null) {
|
||||
$username = $this->user->get_name();
|
||||
$displayname = $this->user->get_displayname();
|
||||
$notes = $this->user->get_notes();
|
||||
$loans = $this->user->get_loans('active');
|
||||
$loan_table = 'Inga pågående lån.';
|
||||
if($loans) {
|
||||
@ -682,6 +684,7 @@ class CheckoutPage extends Page {
|
||||
}
|
||||
print(replace(array('user' => $this->userstr,
|
||||
'displayname' => $displayname,
|
||||
'notes' => $notes,
|
||||
'end' => $enddate,
|
||||
'subtitle' => $subhead,
|
||||
'loan_table' => $loan_table),
|
||||
@ -878,7 +881,17 @@ class Ajax extends Responder {
|
||||
$loan = $product->get_active_loan();
|
||||
if($loan) {
|
||||
$loan->end();
|
||||
return new Success($product->get_name() . ' har lämnats tillbaka.');
|
||||
$user = $loan->get_user();
|
||||
$userlink = replace(array('page' => 'users',
|
||||
'id' => $user->get_id(),
|
||||
'name' => $user->get_displayname()),
|
||||
$this->fragments['item_link']);
|
||||
$productlink = replace(array('page' => 'products',
|
||||
'id' => $product->get_id(),
|
||||
'name' => $product->get_name()),
|
||||
$this->fragments['item_link']);
|
||||
$user = $loan->get_user();
|
||||
return new Success($productlink . ' åter från ' . $userlink);
|
||||
}
|
||||
return new Failure('Artikeln är inte utlånad.');
|
||||
}
|
||||
@ -1099,19 +1112,7 @@ class Ajax extends Responder {
|
||||
}
|
||||
|
||||
private function suggest() {
|
||||
switch($_POST['type']) {
|
||||
case 'tag':
|
||||
return new Success(get_tags());
|
||||
break;
|
||||
case 'field':
|
||||
return new Success(get_fields());
|
||||
break;
|
||||
case 'template':
|
||||
return new Success(get_templates());
|
||||
break;
|
||||
default:
|
||||
return new Failure('Invalid type.');
|
||||
}
|
||||
return new Success(suggest($_POST['type']));
|
||||
}
|
||||
|
||||
private function discard_product() {
|
||||
|
12
script.js
12
script.js
@ -153,6 +153,7 @@ function inventoryProduct(event) {
|
||||
|
||||
function suggest(input, type) {
|
||||
var existing = []
|
||||
var capitalize = true
|
||||
switch(type) {
|
||||
default:
|
||||
return showResult({'type':'error',
|
||||
@ -173,6 +174,9 @@ function suggest(input, type) {
|
||||
break
|
||||
case 'template':
|
||||
break
|
||||
case 'user':
|
||||
capitalize = false
|
||||
break
|
||||
}
|
||||
var render = function(result) {
|
||||
var suggestlist = document.querySelector('#' + type + 'list')
|
||||
@ -186,8 +190,12 @@ function suggest(input, type) {
|
||||
continue
|
||||
}
|
||||
var next = document.createElement('option')
|
||||
next.value = suggestion.charAt(0).toUpperCase()
|
||||
+ suggestion.slice(1)
|
||||
if(capitalize) {
|
||||
next.value = suggestion.charAt(0).toUpperCase()
|
||||
+ suggestion.slice(1)
|
||||
} else {
|
||||
next.value = suggestion
|
||||
}
|
||||
suggestlist.appendChild(next)
|
||||
}
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ thead th, tfoot tr {
|
||||
background-color: #c3d1e2;
|
||||
}
|
||||
|
||||
input:disabled {
|
||||
input:disabled, textarea:disabled {
|
||||
background-color: #ededed;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user