plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Tue Feb 24 10:49:01 CET 2015


 plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php |    7 +++++++
 plugins/tasklist/localization/en_US.inc                  |    2 ++
 plugins/tasklist/tasklist.js                             |    8 ++++++++
 3 files changed, 17 insertions(+)

New commits:
commit 0e4bac5227be2c72407158dcaff3d5b694cb4246
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Tue Feb 24 10:48:47 2015 +0100

    Validate task input form (#3614 and #3680)

diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 3dd977b..c445b0a 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -997,6 +997,13 @@ class tasklist_kolab_driver extends tasklist_driver
             unset($object['startdate']);
         }
 
+        // as per RFC (and the Kolab schema validation), start and due dates need to be of the same type (#3614)
+        // this should be catched in the client already but just make sure we don't write invalid objects
+        if (!empty($object['start']) && !empty($object['due']) && $object['due']->_dateonly != $object['start']->_dateonly) {
+            $object['start']->_dateonly = true;
+            $object['due']->_dateonly = true;
+        }
+
         $object['complete'] = $task['complete'] * 100;
         if ($task['complete'] == 1.0 && empty($task['complete']))
             $object['status'] = 'COMPLETED';
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index 435064d..57ad7e5 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -105,6 +105,8 @@ $labels['savingdata'] = 'Saving data...';
 $labels['errorsaving'] = 'Failed to save data.';
 $labels['notasksfound'] = 'No tasks found for the given criteria';
 $labels['invalidstartduedates'] = 'Start date must not be greater than due date.';
+$labels['invalidstartduetimes'] = 'Start and due dates must either both or none specify a time.';
+$labels['recurrencerequiresdate'] = 'Recurring tasks require either a start or due date.';
 $labels['deletetasktconfirm'] = 'Do you really want to delete this task?';
 $labels['deleteparenttasktconfirm'] = 'Do you really want to delete this task and all its subtasks?';
 $labels['deletelistconfirm'] = 'Do you really want to delete this list with all its tasks?';
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 9d92f25..4acc8e2 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -2206,6 +2206,14 @@ function rcube_tasklist_ui(settings)
                     alert(rcmail.gettext('invalidstartduedates', 'tasklist'));
                     return false;
                 }
+                else if ((data.time == '') != (data.starttime == '')) {
+                    alert(rcmail.gettext('invalidstartduetimes', 'tasklist'));
+                    return false;
+                }
+            }
+            else if (data.recurrence && !data.startdate && !data.date) {
+                alert(rcmail.gettext('recurrencerequiresdate', 'tasklist'));
+                return false;
             }
 
             // collect tags




More information about the commits mailing list