Added handling of expiration dates.
authorNik Okuntseff <support@anuko.com>
Wed, 9 Jan 2019 18:12:48 +0000 (18:12 +0000)
committerNik Okuntseff <support@anuko.com>
Wed, 9 Jan 2019 18:12:48 +0000 (18:12 +0000)
40 files changed:
WEB-INF/lib/ttTimeHelper.class.php
WEB-INF/resources/ca.lang.php
WEB-INF/resources/cs.lang.php
WEB-INF/resources/da.lang.php
WEB-INF/resources/de.lang.php
WEB-INF/resources/en.lang.php
WEB-INF/resources/es.lang.php
WEB-INF/resources/et.lang.php
WEB-INF/resources/fa.lang.php
WEB-INF/resources/fi.lang.php
WEB-INF/resources/fr.lang.php
WEB-INF/resources/gr.lang.php
WEB-INF/resources/he.lang.php
WEB-INF/resources/hu.lang.php
WEB-INF/resources/it.lang.php
WEB-INF/resources/ja.lang.php
WEB-INF/resources/ko.lang.php
WEB-INF/resources/nl.lang.php
WEB-INF/resources/no.lang.php
WEB-INF/resources/pl.lang.php
WEB-INF/resources/pt-br.lang.php
WEB-INF/resources/pt.lang.php
WEB-INF/resources/ro.lang.php
WEB-INF/resources/ru.lang.php
WEB-INF/resources/sk.lang.php
WEB-INF/resources/sl.lang.php
WEB-INF/resources/sr.lang.php
WEB-INF/resources/sv.lang.php
WEB-INF/resources/tr.lang.php
WEB-INF/resources/zh-cn.lang.php
WEB-INF/resources/zh-tw.lang.php
WEB-INF/templates/footer.tpl
expense_edit.php
expenses.php
mobile/expense_edit.php
mobile/expenses.php
mobile/time.php
mobile/time_edit.php
time.php
time_edit.php

index 4e10f4e..a66652b 100644 (file)
@@ -748,4 +748,18 @@ class ttTimeHelper {
 
     return $result;
   }
+
+  // canAdd determines if we can add a record in case there is a limit.
+  static function canAdd() {
+    $mdb2 = getConnection();
+    $sql = "select param_value from tt_site_config where param_name = 'exp_date'";
+    $res = $mdb2->query($sql);
+    $val = $res->fetchRow();
+    if (!$val) return true; // No expiration date.
+
+    if (strtotime($val['param_value']) > time())
+      return true; // Expiration date exists but not reached.
+
+    return false;
+  }
 }
index f38bcab..7b5a5d6 100644 (file)
@@ -117,6 +117,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index baf085b..8c875b9 100644 (file)
@@ -119,6 +119,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 051b6f8..7b9faf3 100644 (file)
@@ -111,6 +111,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 6eaa77f..2c21205 100644 (file)
@@ -105,6 +105,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 687f19d..2db7e2d 100644 (file)
@@ -102,6 +102,7 @@ $i18n_key_words = array(
 'error.cannot_import' => 'Cannot import: %s.',
 'error.format' => 'Invalid file format.',
 'error.user_count' => 'Limit on user count.',
+'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 'warn.sure' => 'Are you sure?',
index fbf7076..0f8bc12 100644 (file)
@@ -115,6 +115,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 860b8cd..1387bea 100644 (file)
@@ -120,6 +120,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 3ec01e2..dfb0105 100644 (file)
@@ -118,6 +118,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 4895713..1bd0982 100644 (file)
@@ -113,6 +113,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 5e00366..430c5b1 100644 (file)
@@ -111,6 +111,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 6e7b32e..88dad80 100644 (file)
@@ -106,6 +106,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index daedb00..1420500 100644 (file)
@@ -128,6 +128,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index fcd4c25..6d4698e 100644 (file)
@@ -117,6 +117,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 36f8ab3..c14d770 100644 (file)
@@ -110,6 +110,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 4cb224f..d7e2dcf 100644 (file)
@@ -121,6 +121,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 2c0a898..1866dd5 100644 (file)
@@ -120,6 +120,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index d98188f..823035c 100644 (file)
@@ -103,6 +103,7 @@ $i18n_key_words = array(
 'error.format' => 'Bestandsformaat niet valide.',
 // TODO: translate the following.
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 650957e..8a698d1 100644 (file)
@@ -120,6 +120,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 11b6c4b..2922a34 100644 (file)
@@ -115,6 +115,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 3e36200..8691f93 100644 (file)
@@ -112,6 +112,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index c3ef6c5..bc5d838 100644 (file)
@@ -114,6 +114,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 01ecded..6eb2211 100644 (file)
@@ -121,6 +121,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index f68e063..4b524b8 100644 (file)
@@ -101,6 +101,7 @@ $i18n_key_words = array(
 'error.cannot_import' => 'Невозможно импортировать: %s.',
 'error.format' => 'Неверный формат файла.',
 'error.user_count' => 'Ограничение на количество пользователей.',
+'error.expired' => 'Достигнута дата экспирации.',
 
 // Warning messages.
 'warn.sure' => 'Вы уверены?',
index 33622c9..726c78e 100644 (file)
@@ -117,6 +117,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 6b3881a..18ddd37 100644 (file)
@@ -111,6 +111,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 3b12961..c20cc43 100644 (file)
@@ -112,6 +112,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 5ddd55d..d1a1064 100644 (file)
@@ -110,6 +110,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index fafeeaa..38b4a4b 100644 (file)
@@ -124,6 +124,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 656eb45..fd4e2b8 100644 (file)
@@ -112,6 +112,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index 0bdb2e0..4112fa1 100644 (file)
@@ -118,6 +118,7 @@ $i18n_key_words = array(
 // 'error.cannot_import' => 'Cannot import: %s.',
 // 'error.format' => 'Invalid file format.',
 // 'error.user_count' => 'Limit on user count.',
+// 'error.expired' => 'Expiration date reached.',
 
 // Warning messages.
 // TODO: translate the following.
index bf9a81c..35fc2a5 100644 (file)
@@ -12,7 +12,7 @@
       <br>
       <table cellspacing="0" cellpadding="4" width="100%" border="0">
         <tr>
-          <td align="center">&nbsp;Anuko Time Tracker 1.18.36.4701 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+          <td align="center">&nbsp;Anuko Time Tracker 1.18.36.4702 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
             <a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
             <a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
             <a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>
index 8eb7d4f..b1115f1 100644 (file)
@@ -30,6 +30,7 @@ require_once('initialize.php');
 import('form.Form');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
@@ -176,6 +177,8 @@ if ($request->isPost()) {
     if ($new_date->after($browser_today))
       $err->add($i18n->get('error.future_date'));
   }
+  if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
+  // Finished validating user input.
 
   // Save record.
   if ($request->getParameter('btn_save')) {
index 9a34542..e1eaedd 100644 (file)
@@ -31,6 +31,7 @@ import('form.Form');
 import('ttUserHelper');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
@@ -202,6 +203,7 @@ if ($request->isPost()) {
       if ($selected_date->after($browser_today))
         $err->add($i18n->get('error.future_date'));
     }
+    if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
     // Finished validating input data.
 
     // Prohibit creating entries in locked range.
index 4c183af..e9e1ca6 100644 (file)
@@ -30,6 +30,7 @@ require_once('../initialize.php');
 import('form.Form');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
@@ -171,6 +172,8 @@ if ($request->isPost()) {
     if ($new_date->after($browser_today))
       $err->add($i18n->get('error.future_date'));
   }
+  if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
+  // Finished validating input data.
 
   // Save record.
   if ($request->getParameter('btn_save')) {
index ac56520..1b8f7cd 100644 (file)
@@ -31,6 +31,7 @@ import('form.Form');
 import('ttUserHelper');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
@@ -207,6 +208,7 @@ if ($request->isPost()) {
       if ($selected_date->after($browser_today))
         $err->add($i18n->get('error.future_date'));
     }
+    if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
     // Finished validating input data.
 
     // Prohibit creating entries in locked range.
index 107a72c..364379f 100644 (file)
@@ -267,6 +267,7 @@ if ($request->isPost()) {
         $err->add($i18n->get('error.field'), $i18n->get('label.duration'));
     }
     if (!ttValidString($cl_note, true)) $err->add($i18n->get('error.field'), $i18n->get('label.note'));
+    if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
     // Finished validating user input.
 
     // Prohibit creating entries in future.
index cdd5070..803ca4e 100644 (file)
@@ -252,6 +252,7 @@ if ($request->isPost()) {
   }
   if (!ttValidDate($cl_date)) $err->add($i18n->get('error.field'), $i18n->get('label.date'));
   if (!ttValidString($cl_note, true)) $err->add($i18n->get('error.field'), $i18n->get('label.note'));
+  if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
   // Finished validating user input.
 
   // This is a new date for the time record.
index 0431c2b..5a9b521 100644 (file)
--- a/time.php
+++ b/time.php
@@ -288,6 +288,7 @@ if ($request->isPost()) {
         $err->add($i18n->get('error.field'), $i18n->get('label.duration'));
     }
     if (!ttValidString($cl_note, true)) $err->add($i18n->get('error.field'), $i18n->get('label.note'));
+    if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
     // Finished validating user input.
 
     // Prohibit creating entries in future.
index 16f69d2..3bd52e6 100644 (file)
@@ -257,6 +257,7 @@ if ($request->isPost()) {
   }
   if (!ttValidDate($cl_date)) $err->add($i18n->get('error.field'), $i18n->get('label.date'));
   if (!ttValidString($cl_note, true)) $err->add($i18n->get('error.field'), $i18n->get('label.note'));
+  if (!ttTimeHelper::canAdd()) $err->add($i18n->get('error.expired'));
   // Finished validating user input.
 
   // This is a new date for the time record.