diff --git a/cron.php b/cron.php index 8354665..f307a0d 100755 --- a/cron.php +++ b/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()); } } } diff --git a/html/fragments.html b/html/fragments.html index d1170b7..a277137 100644 --- a/html/fragments.html +++ b/html/fragments.html @@ -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" diff --git a/include/db.php b/include/db.php index d632d83..a9d0c4a 100644 --- a/include/db.php +++ b/include/db.php @@ -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; } diff --git a/include/view.php b/include/view.php index 06792eb..276493a 100644 --- a/include/view.php +++ b/include/view.php @@ -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() { diff --git a/script.js b/script.js index 2e77a09..9003b93 100644 --- a/script.js +++ b/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) } } diff --git a/style.css b/style.css index 427c320..41d4423 100644 --- a/style.css +++ b/style.css @@ -96,7 +96,7 @@ thead th, tfoot tr { background-color: #c3d1e2; } -input:disabled { +input:disabled, textarea:disabled { background-color: #ededed; }