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) {
|
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";
|
$reminder_template = "¤name¤, försenad sedan ¤due¤\n";
|
||||||
$message_template = <<<EOF
|
$message_template = <<<EOF
|
||||||
Hej ¤name¤
|
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¤
|
¤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.
|
oss för att få lånet förlängt.
|
||||||
|
|
||||||
Mvh
|
Mvh
|
||||||
DMC Helpdesk
|
DSV Helpdesk
|
||||||
helpdesk@dsv.su.se
|
helpdesk@dsv.su.se
|
||||||
08 - 16 16 48
|
08 - 16 16 48
|
||||||
EOF;
|
EOF;
|
||||||
|
|
||||||
$overdue_count = count($loans);
|
$overdue_count = count($loans);
|
||||||
$reminder_list = '';
|
$reminder_list = '';
|
||||||
|
$late = 'försenat';
|
||||||
|
$product = 'artikel';
|
||||||
|
if($count > 1) {
|
||||||
|
$late = 'försenade';
|
||||||
|
$product = 'artiklar';
|
||||||
|
}
|
||||||
foreach($loans as $loan) {
|
foreach($loans as $loan) {
|
||||||
$replacements = array('name' => $loan->get_product()->get_name(),
|
$replacements = array('name' => $loan->get_product()->get_name(),
|
||||||
'due' => $loan->get_duration()['end']);
|
'due' => $loan->get_duration()['end']);
|
||||||
$reminder_list .= replace($replacements, $reminder_template);
|
$reminder_list .= replace($replacements, $reminder_template);
|
||||||
}
|
}
|
||||||
|
|
||||||
$subject = replace(array('count' => $overdue_count), $subject_template);
|
$subject = replace(array('count' => $overdue_count,
|
||||||
$message = replace(array('name' => $user->get_displayname(),
|
'late' => $late), $subject_template);
|
||||||
'list' => $reminder_list), $message_template);
|
$message = replace(array('name' => $user->get_displayname(),
|
||||||
|
'list' => $reminder_list,
|
||||||
|
'product' => $product), $message_template);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mb_send_mail($user->get_email(),
|
mb_send_mail($user->get_email(),
|
||||||
@ -75,7 +83,8 @@ EOF;
|
|||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
mb_send_mail('root@dsv.su.se',
|
mb_send_mail('root@dsv.su.se',
|
||||||
"Kunde inte skicka påminnelse",
|
"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"
|
<form class="dark"
|
||||||
action="./"
|
action="./"
|
||||||
method="GET">
|
method="GET">
|
||||||
|
<datalist id="userlist"></datalist>
|
||||||
<input type="hidden"
|
<input type="hidden"
|
||||||
name="page"
|
name="page"
|
||||||
value="checkout" />
|
value="checkout" />
|
||||||
@ -410,8 +411,11 @@
|
|||||||
<span class="label">
|
<span class="label">
|
||||||
Användarnamn:
|
Användarnamn:
|
||||||
</span>
|
</span>
|
||||||
<input type="text"
|
<input onFocus="JavaScript:suggest(this, 'user')"
|
||||||
|
type="text"
|
||||||
name="user"
|
name="user"
|
||||||
|
list="userlist"
|
||||||
|
autocomplete="off"
|
||||||
placeholder="Användarnamn"
|
placeholder="Användarnamn"
|
||||||
value="¤user¤"
|
value="¤user¤"
|
||||||
required />
|
required />
|
||||||
@ -428,6 +432,13 @@
|
|||||||
value="¤displayname¤"
|
value="¤displayname¤"
|
||||||
disabled />
|
disabled />
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="label">
|
||||||
|
Anteckningar:
|
||||||
|
</span>
|
||||||
|
<textarea name="notes"
|
||||||
|
disabled>¤notes¤</textarea>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<h2>Låna ut artikel</h2>
|
<h2>Låna ut artikel</h2>
|
||||||
<form class="light"
|
<form class="light"
|
||||||
|
@ -83,42 +83,39 @@ function get_items($type) {
|
|||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_tags() {
|
function suggest($type) {
|
||||||
$search = prepare(
|
$search = '';
|
||||||
'(select `tag` from `product_tag`)
|
$typename = 'name';
|
||||||
union
|
switch($type) {
|
||||||
(select `tag` from `template_tag`)
|
case 'user':
|
||||||
order by `tag`'
|
$search = prepare('select `name` from `user` order by `name`');
|
||||||
);
|
break;
|
||||||
execute($search);
|
case 'template':
|
||||||
$out = array();
|
$search = prepare('select `name` from `template` order by `name`');
|
||||||
foreach(result_list($search) as $row) {
|
break;
|
||||||
$out[] = $row['tag'];
|
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);
|
execute($search);
|
||||||
$out = array();
|
$out = array();
|
||||||
foreach(result_list($search) as $row) {
|
foreach(result_list($search) as $row) {
|
||||||
$out[] = $row['field'];
|
$out[] = $row[$typename];
|
||||||
}
|
|
||||||
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'];
|
|
||||||
}
|
}
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ abstract class Page extends Responder {
|
|||||||
protected abstract function render_body();
|
protected abstract function render_body();
|
||||||
|
|
||||||
protected $page = 'checkout';
|
protected $page = 'checkout';
|
||||||
protected $title = "Boka2";
|
protected $title = "DSV Utlåning";
|
||||||
protected $subtitle = '';
|
protected $subtitle = '';
|
||||||
protected $error = null;
|
protected $error = null;
|
||||||
protected $menuitems = array('checkout' => 'Låna',
|
protected $menuitems = array('checkout' => 'Låna',
|
||||||
@ -666,12 +666,14 @@ class CheckoutPage extends Page {
|
|||||||
protected function render_body() {
|
protected function render_body() {
|
||||||
$username = '';
|
$username = '';
|
||||||
$displayname = '';
|
$displayname = '';
|
||||||
|
$notes = '';
|
||||||
$loan_table = '';
|
$loan_table = '';
|
||||||
$subhead = '';
|
$subhead = '';
|
||||||
$enddate = gmdate('Y-m-d', time() + 604800); # 1 week from now
|
$enddate = gmdate('Y-m-d', time() + 604800); # 1 week from now
|
||||||
if($this->user !== null) {
|
if($this->user !== null) {
|
||||||
$username = $this->user->get_name();
|
$username = $this->user->get_name();
|
||||||
$displayname = $this->user->get_displayname();
|
$displayname = $this->user->get_displayname();
|
||||||
|
$notes = $this->user->get_notes();
|
||||||
$loans = $this->user->get_loans('active');
|
$loans = $this->user->get_loans('active');
|
||||||
$loan_table = 'Inga pågående lån.';
|
$loan_table = 'Inga pågående lån.';
|
||||||
if($loans) {
|
if($loans) {
|
||||||
@ -682,6 +684,7 @@ class CheckoutPage extends Page {
|
|||||||
}
|
}
|
||||||
print(replace(array('user' => $this->userstr,
|
print(replace(array('user' => $this->userstr,
|
||||||
'displayname' => $displayname,
|
'displayname' => $displayname,
|
||||||
|
'notes' => $notes,
|
||||||
'end' => $enddate,
|
'end' => $enddate,
|
||||||
'subtitle' => $subhead,
|
'subtitle' => $subhead,
|
||||||
'loan_table' => $loan_table),
|
'loan_table' => $loan_table),
|
||||||
@ -878,7 +881,17 @@ class Ajax extends Responder {
|
|||||||
$loan = $product->get_active_loan();
|
$loan = $product->get_active_loan();
|
||||||
if($loan) {
|
if($loan) {
|
||||||
$loan->end();
|
$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.');
|
return new Failure('Artikeln är inte utlånad.');
|
||||||
}
|
}
|
||||||
@ -1099,19 +1112,7 @@ class Ajax extends Responder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function suggest() {
|
private function suggest() {
|
||||||
switch($_POST['type']) {
|
return new Success(suggest($_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.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function discard_product() {
|
private function discard_product() {
|
||||||
|
12
script.js
12
script.js
@ -153,6 +153,7 @@ function inventoryProduct(event) {
|
|||||||
|
|
||||||
function suggest(input, type) {
|
function suggest(input, type) {
|
||||||
var existing = []
|
var existing = []
|
||||||
|
var capitalize = true
|
||||||
switch(type) {
|
switch(type) {
|
||||||
default:
|
default:
|
||||||
return showResult({'type':'error',
|
return showResult({'type':'error',
|
||||||
@ -173,6 +174,9 @@ function suggest(input, type) {
|
|||||||
break
|
break
|
||||||
case 'template':
|
case 'template':
|
||||||
break
|
break
|
||||||
|
case 'user':
|
||||||
|
capitalize = false
|
||||||
|
break
|
||||||
}
|
}
|
||||||
var render = function(result) {
|
var render = function(result) {
|
||||||
var suggestlist = document.querySelector('#' + type + 'list')
|
var suggestlist = document.querySelector('#' + type + 'list')
|
||||||
@ -186,8 +190,12 @@ function suggest(input, type) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
var next = document.createElement('option')
|
var next = document.createElement('option')
|
||||||
next.value = suggestion.charAt(0).toUpperCase()
|
if(capitalize) {
|
||||||
+ suggestion.slice(1)
|
next.value = suggestion.charAt(0).toUpperCase()
|
||||||
|
+ suggestion.slice(1)
|
||||||
|
} else {
|
||||||
|
next.value = suggestion
|
||||||
|
}
|
||||||
suggestlist.appendChild(next)
|
suggestlist.appendChild(next)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ thead th, tfoot tr {
|
|||||||
background-color: #c3d1e2;
|
background-color: #c3d1e2;
|
||||||
}
|
}
|
||||||
|
|
||||||
input:disabled {
|
input:disabled, textarea:disabled {
|
||||||
background-color: #ededed;
|
background-color: #ededed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user