]> wagnertech.de Git - timetracker.git/commitdiff
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 4e10f4ed749b8d9d89faf9ba8a474d22beb878e0..a66652b70a2edd0c8d45e0a55f0621ae3e5004ba 100644 (file)
@@ -748,4 +748,18 @@ class ttTimeHelper {
 
     return $result;
   }
 
     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 f38bcabd2c3555b46752b9fddc1f2a5b7d8d513b..7b5a5d62fa087739575c519b1fedd7bda42d99c6 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index baf085b51605169a738f7d0bbb72b782e2619541..8c875b92b438b1d3df230baffa1a269fb1d6501f 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 051b6f8c2fdcb2a39a1fbb6b443a24237d5fafd7..7b9faf3b7d69a4815dae7144fcabcd817895a529 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 6eaa77f7041aba39762a099fc3a70fc20cbc9e97..2c21205d75cfbe12955db7f66f4ab9ec3fdebdec 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 687f19daf35e2060c7684a255387ecb03d4b5d46..2db7e2d900519de024d719e9b8644bf0c6889f35 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.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?',
 
 // Warning messages.
 'warn.sure' => 'Are you sure?',
index fbf7076aaec1f1b56dba4025c45eb5d245dc3099..0f8bc123c58b36fe7c4aa9a87d916891dcfbe76d 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 860b8cd93e8147d2b9fb2bc20452db1a0edfc520..1387bea36a860d153863736a79e98a264010b467 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 3ec01e23e09063ff8a8facb54d086c1b91747152..dfb010500f011aed8ec65ae629223f8eb1bba952 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 4895713b5d4f5584cba4c0a1dc5284a4df1e6691..1bd098221ddd9161c7642b3650e9a80261c7c0e6 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 5e003665473d1b64bf8b08c5658a60c4c6925ec1..430c5b1c6f6c44e2a46d77c7ef54ebda95f483a4 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 6e7b32ef0c9cd3e97469ec4ded58475e5cfaf771..88dad80f7f071582560f7dcb0a750051ca5832ca 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index daedb00be03ffbc9d4773cfc6cc47a9a2cbb7e28..1420500bbf58addae07bf5c350ced1022bc9e860 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index fcd4c2566be08103ad55a05b86da77e3c921a09e..6d4698e68765ef94a0d3561bbf16c64295dd264f 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 36f8ab3da36616039c3ebd1f852fdc3aa05a24f9..c14d770e5c0e2ad8b355c1adb513e7f72bff964f 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 4cb224fb5a14fd96780ec9a0d4b4a85ec88166ab..d7e2dcf9addcf53409e6072501c19eeba9c8b8ac 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 2c0a898e007cee039f884f24badde17748aef0d3..1866dd54b588fb53191cea1f382ed9b231c7c13f 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index d98188f48cb12d2fa1a557995e9341bec55d6513..823035ce0b1774c1921d6ac822dde644a6ec7d7b 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 650957eda51f08bed96094cd19a3c8bdd7d61b80..8a698d1de95b1906e852fe5baf36b7668be9ac97 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 11b6c4b42c28b61170b7acc2ec786ec2681e81c5..2922a34211bc29e19bd1b2688256bad868e1ec8d 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 3e36200ea351c8b58fdfa0707266245a186e861a..8691f93830f02cd021b7e3d802e1110f2650d477 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index c3ef6c5c36efe0bced6e9340a139a70603531dbd..bc5d8386b96cb7cd90d3719653a4b5cd9d1aab3a 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 01ecded5d9f97db05a3c655c026743216924b00b..6eb221121303d05fea1cb7d4e97a9dcd67a79f9d 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index f68e0631c085d8a1b44ececa1ad296d263925351..4b524b82dfd21870ec2aca80817341990d9b81d3 100644 (file)
@@ -101,6 +101,7 @@ $i18n_key_words = array(
 'error.cannot_import' => 'Невозможно импортировать: %s.',
 'error.format' => 'Неверный формат файла.',
 'error.user_count' => 'Ограничение на количество пользователей.',
 'error.cannot_import' => 'Невозможно импортировать: %s.',
 'error.format' => 'Неверный формат файла.',
 'error.user_count' => 'Ограничение на количество пользователей.',
+'error.expired' => 'Достигнута дата экспирации.',
 
 // Warning messages.
 'warn.sure' => 'Вы уверены?',
 
 // Warning messages.
 'warn.sure' => 'Вы уверены?',
index 33622c9909e1a18c25d47d4bd0d61f9d40e38a6d..726c78e80c0d637178ebbf5ab0bc9389924e3d71 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 6b3881a132ce00708603ebae3c008b1db83d4322..18ddd37f9ecc80e3f2430f9d7899369b573c84ea 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 3b12961d6f5a2526bf980d1801289c2c5c9ad97b..c20cc43fcac77fdae3cd2c6bdaa9a0ca35ccf6f9 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 5ddd55d1fd11ac4b1e970cff65cfa2eef5704ca4..d1a10648338b1ffb23c5b5c6b1000e66b81b1799 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index fafeeaaf2b4e36fb9fd49bf8ab4323ddbf4dadb8..38b4a4b291fb89ab283c8e32e39607698132a34e 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 656eb451691006decbdbf0c0a5b83342bb565172..fd4e2b88ce42cc08156ac90e733f7970de8cf81b 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index 0bdb2e05d07a315fda19d89bba664a8601546ea0..4112fa1595ce150df4f073e227cb99e0e1626ba9 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.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.
 
 // Warning messages.
 // TODO: translate the following.
index bf9a81c0c304db038bd6cae403c29ce88a9f8ee2..35fc2a5d35a9cc9a9f021d790c8b660678efd01d 100644 (file)
@@ -12,7 +12,7 @@
       <br>
       <table cellspacing="0" cellpadding="4" width="100%" border="0">
         <tr>
       <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>
             <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 8eb7d4fe0d4bd7a31db819c062aefc8047280f6e..b1115f1e30b3eb82cac969fb1489d60b30293d30 100644 (file)
@@ -30,6 +30,7 @@ require_once('initialize.php');
 import('form.Form');
 import('ttGroupHelper');
 import('DateAndTime');
 import('form.Form');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
 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 ($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')) {
 
   // Save record.
   if ($request->getParameter('btn_save')) {
index 9a34542213a813bfb3b0d2fe2e110d9a51d4a239..e1eaeddae4cd14503a07f53396e455eb75a357ed 100644 (file)
@@ -31,6 +31,7 @@ import('form.Form');
 import('ttUserHelper');
 import('ttGroupHelper');
 import('DateAndTime');
 import('ttUserHelper');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
 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 ($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.
     // Finished validating input data.
 
     // Prohibit creating entries in locked range.
index 4c183afd964953b2cc0818df1d37e4b74091faab..e9e1ca63a7a4d9e238b2d2df3868dc29a46c6a06 100644 (file)
@@ -30,6 +30,7 @@ require_once('../initialize.php');
 import('form.Form');
 import('ttGroupHelper');
 import('DateAndTime');
 import('form.Form');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
 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 ($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')) {
 
   // Save record.
   if ($request->getParameter('btn_save')) {
index ac565207ba3c04d3ac400b775a24faf8be970bfd..1b8f7cda9f268f7bb19b4c36bf7a9a4532b6d82e 100644 (file)
@@ -31,6 +31,7 @@ import('form.Form');
 import('ttUserHelper');
 import('ttGroupHelper');
 import('DateAndTime');
 import('ttUserHelper');
 import('ttGroupHelper');
 import('DateAndTime');
+import('ttTimeHelper');
 import('ttExpenseHelper');
 
 // Access checks.
 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 ($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.
     // Finished validating input data.
 
     // Prohibit creating entries in locked range.
index 107a72c7f5193a42b3d4e0c37c67bd86cc4e8118..364379f4f85fd05034487c0e03f88c9279642ec8 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'));
         $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.
     // Finished validating user input.
 
     // Prohibit creating entries in future.
index cdd5070778d02065b46b90b57792fb1f85a6a9b5..803ca4e4f5597506087fe6ec743f542b528bf4e3 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 (!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.
   // Finished validating user input.
 
   // This is a new date for the time record.
index 0431c2bec94570bc43fb14e307b2a196f85a32e1..5a9b5210d98906e063a57a1e79578cc378e410c7 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'));
         $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.
     // Finished validating user input.
 
     // Prohibit creating entries in future.
index 16f69d2ab9e12058e44a747d92375c40eb9e553a..3bd52e6f50e1f1f9492f6c5bdb797307b1819fde 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 (!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.
   // Finished validating user input.
 
   // This is a new date for the time record.