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