Page MenuHomePhorge

Priority for roundcubemail tasklist plugin
Open, WishlistPublic

Description

It would be nice to have the priority field for the tasklist plugin for roundcubemail. This can be used to sort the tasks.

Here is my implementation proposal:

diff -ru origin/plugins/tasklist/localization/en_US.inc plugins/tasklist/localization/en_US.inc
--- origin/plugins/tasklist/localization/en_US.inc	2024-03-15 22:45:50.629981777 +0100
+++ plugins/tasklist/localization/en_US.inc	2024-04-04 13:58:07.083863254 +0200
@@ -56,6 +56,16 @@
 $labels['created'] = 'Created';
 $labels['changed'] = 'Last Modified';
 $labels['taskoptions'] = 'Options';
+$labels['priority'] = 'Priority';
+$labels['priority-1'] = 'Highest';
+$labels['priority-2'] = 'Very high';
+$labels['priority-3'] = 'High';
+$labels['priority-4'] = 'Highish';
+$labels['priority-5'] = 'Middle';
+$labels['priority-6'] = 'Lowish';
+$labels['priority-7'] = 'Low';
+$labels['priority-8'] = 'Very low';
+$labels['priority-9'] = 'Lowest';
 
 $labels['all'] = 'All';
 $labels['flagged'] = 'Flagged';
diff -ru origin/plugins/tasklist/skins/elastic/templates/mainview.html plugins/tasklist/skins/elastic/templates/mainview.html
--- origin/plugins/tasklist/skins/elastic/templates/mainview.html	2023-01-24 22:16:43.020349022 +0100
+++ plugins/tasklist/skins/elastic/templates/mainview.html	2024-04-04 13:12:38.706878146 +0200
@@ -147,6 +147,10 @@
 				<label class="col-sm-4 col-form-label"><roundcube:label name="tasklist.status" /></label>
 				<span class="task-text col-sm-8 form-control-plaintext"></span>
 			</div>
+			<div id="task-priority" class="form-group row">
+				<label class="col-sm-4 col-form-label"><roundcube:label name="tasklist.priority" /></label>
+				<span class="task-text col-sm-8 form-control-plaintext"></span>
+			</div>
 			<div id="task-links" class="form-group row">
 				<label class="col-sm-4 col-form-label"><roundcube:label name="tasklist.links" /></label>
 				<span class="task-text col-sm-8"></span>
diff -ru origin/plugins/tasklist/skins/elastic/templates/taskedit.html plugins/tasklist/skins/elastic/templates/taskedit.html
--- origin/plugins/tasklist/skins/elastic/templates/taskedit.html	2023-01-24 22:16:43.020349022 +0100
+++ plugins/tasklist/skins/elastic/templates/taskedit.html	2024-04-04 12:52:04.264429356 +0200
@@ -56,6 +56,12 @@
 					<roundcube:object name="plugin.status_select" id="taskedit-status" class="form-control" />
 				</div>
 			</div>
+			<div class="form-group row">
+				<label for="taskedit-priority" class="col-sm-2 col-form-label"><roundcube:label name="tasklist.priority" /></label>
+				<div class="col-sm-10">
+					<roundcube:object name="plugin.priority_select" id="taskedit-priority" class="form-control" />
+				</div>
+			</div>
 			<div class="form-group row" id="tasklist-select">
 				<label for="taskedit-tasklist" class="col-sm-2 col-form-label"><roundcube:label name="tasklist.list" /></label>
 				<div class="col-sm-10">
diff -ru origin/plugins/tasklist/skins/larry/templates/mainview.html plugins/tasklist/skins/larry/templates/mainview.html
--- origin/plugins/tasklist/skins/larry/templates/mainview.html	2023-01-24 22:16:43.020349022 +0100
+++ plugins/tasklist/skins/larry/templates/mainview.html	2024-04-04 13:06:38.371416677 +0200
@@ -216,6 +216,10 @@
 		<label><roundcube:label name="tasklist.status" /></label>
 		<span class="task-text"></span>
 	</div>
+	<div id="task-priority" class="form-section">
+		<label><roundcube:label name="tasklist.priority" /></label>
+		<span class="task-text"></span>
+	</div>
 	<div id="task-links" class="form-section">
 		<label><roundcube:label name="tasklist.links" /></label>
 		<span class="task-text"></span>
diff -ru origin/plugins/tasklist/skins/larry/templates/taskedit.html plugins/tasklist/skins/larry/templates/taskedit.html
--- origin/plugins/tasklist/skins/larry/templates/taskedit.html	2023-01-24 22:16:43.020349022 +0100
+++ plugins/tasklist/skins/larry/templates/taskedit.html	2024-04-04 12:53:51.360348873 +0200
@@ -50,6 +50,10 @@
 				<label for="taskedit-status"><roundcube:label name="tasklist.status" /></label>
 				<roundcube:object name="plugin.status_select" id="taskedit-status" />
 			</div>
+			<div class="form-section">
+				<label for="taskedit-priority"><roundcube:label name="tasklist.priority" /></label>
+				<roundcube:object name="plugin.priority_select" id="taskedit-priority" />
+			</div>
 			<div class="form-section" id="tasklist-select">
 				<label for="taskedit-tasklist"><roundcube:label name="tasklist.list" /></label>
 				<roundcube:object name="plugin.tasklist_select" id="taskedit-tasklist" />
diff -ru origin/plugins/tasklist/tasklist.js plugins/tasklist/tasklist.js
--- origin/plugins/tasklist/tasklist.js	2024-04-03 21:39:06.815162072 +0200
+++ plugins/tasklist/tasklist.js	2024-04-04 14:04:49.848084280 +0200
@@ -1631,6 +1631,9 @@
         }
         // default sorting (auto)
         else {
+            if (!d && a.priority != b.priority) {
+                d = (a.priority ? a.priority : 5) - (b.priority ? b.priority : 5);
+            }
             if (!d) d = (b._hasdate-0) - (a._hasdate-0);
             if (!d) d = (a.datetime||99999999999) - (b.datetime||99999999999);
         }
@@ -2017,6 +2020,7 @@
         $('#task-alarm')[(rec.alarms_text ? 'show' : 'hide')]().children('.task-text').html(Q(rec.alarms_text));
         $('#task-completeness .task-text').html(((rec.complete || 0) * 100) + '%');
         $('#task-status')[(rec.status ? 'show' : 'hide')]().children('.task-text').text(status);
+        $('#task-priority')[(rec.priority ? 'show' : 'hide')]().children('.task-text').text(rcmail.gettext('priority-' + rec.priority,'tasklist'));
         $('#task-list .task-text').html(Q(me.tasklists[rec.list] ? me.tasklists[rec.list].name : ''));
         $('#task-attendees, #task-organizer, #task-created-changed, #task-created, #task-changed, #task-rsvp, #task-rsvp-comment').hide();
 
@@ -2461,6 +2465,7 @@
         var complete = $('#taskedit-completeness').val((rec.complete || 0) * 100);
         completeness_slider.slider('value', complete.val());
         var taskstatus = $('#taskedit-status').val(rec.status || '');
+        var taskpriority = $('#taskedit-priority').val(rec.priority || '');
         var tasklist = $('#taskedit-tasklist').prop('disabled', rec.parent_id ? true : false);
         var notify = $('#edit-attendees-donotify').get(0);
         var invite = $('#edit-attendees-invite').get(0);
@@ -2581,7 +2586,7 @@
             data._status_before = me.selected_task.status + '';
 
             // copy form field contents into task object to save
-            $.each({ title:title, description:description, date:recdate, time:rectime, startdate:recstartdate, starttime:recstarttime, status:taskstatus }, function(key,input){
+            $.each({ title:title, description:description, date:recdate, time:rectime, startdate:recstartdate, starttime:recstarttime, status:taskstatus, priority:taskpriority }, function(key,input){
                 data[key] = input.val();
             });
 
diff -ru origin/plugins/tasklist/tasklist_ui.php plugins/tasklist/tasklist_ui.php
--- origin/plugins/tasklist/tasklist_ui.php	2024-04-03 21:39:06.815162072 +0200
+++ plugins/tasklist/tasklist_ui.php	2024-04-04 13:22:50.245918418 +0200
@@ -141,6 +141,7 @@
         $this->plugin->register_handler('plugin.tasklists', [$this, 'tasklists']);
         $this->plugin->register_handler('plugin.tasklist_select', [$this, 'tasklist_select']);
         $this->plugin->register_handler('plugin.status_select', [$this, 'status_select']);
+        $this->plugin->register_handler('plugin.priority_select', [$this, 'priority_select']);
         $this->plugin->register_handler('plugin.searchform', [$this->rc->output, 'search_form']);
         $this->plugin->register_handler('plugin.quickaddform', [$this, 'quickadd_form']);
         $this->plugin->register_handler('plugin.tasks', [$this, 'tasks_resultview']);
@@ -351,6 +352,27 @@
 
         return $select->show(null);
     }
+
+    /**
+     * Render HTML form for task priority selector
+     */
+    public function priority_select($attrib = [])
+    {
+        $attrib['name'] = 'priority';
+        $select = new html_select($attrib);
+        $select->add('---', '');
+        $select->add($this->plugin->gettext('priority-1'), '1');
+        $select->add($this->plugin->gettext('priority-2'), '2');
+        $select->add($this->plugin->gettext('priority-3'), '3');
+        $select->add($this->plugin->gettext('priority-4'), '4');
+        $select->add($this->plugin->gettext('priority-5'), '5');
+        $select->add($this->plugin->gettext('priority-6'), '6');
+        $select->add($this->plugin->gettext('priority-7'), '7');
+        $select->add($this->plugin->gettext('priority-8'), '8');
+        $select->add($this->plugin->gettext('priority-9'), '9');
+
+        return $select->show(null);
+    }
 
     /**
      * Render a HTML select box for list selection

Details

Ticket Type
Task