plugins/tasklist
Thomas Brüderli
bruederli at kolabsys.com
Thu Jul 31 16:24:27 CEST 2014
plugins/tasklist/localization/en_US.inc | 4 +
plugins/tasklist/skins/larry/templates/mainview.html | 6 ++
plugins/tasklist/tasklist.js | 45 +++++++++++++++----
plugins/tasklist/tasklist.php | 10 +++-
4 files changed, 55 insertions(+), 10 deletions(-)
New commits:
commit 5cdeed5c6829fe870689a2db2a83d0f31f1c31a8
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date: Thu Jul 31 16:24:21 2014 +0200
Add filters for my tasks and assigned to others; allow combined filter selections (using shift+click)
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index a7ec1ea..99a11b0 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -43,6 +43,10 @@ $labels['today'] = 'Today';
$labels['tomorrow'] = 'Tomorrow';
$labels['next7days'] = 'Next 7 days';
$labels['later'] = 'Later';
+$labels['assigned'] = 'Assigned';
+$labels['assignedtitle'] = 'Tasks you assigned to others';
+$labels['mytasks'] = 'My tasks';
+$labels['mytaskstitle'] = 'Tasks assigned to you';
$labels['nodate'] = 'no date';
$labels['removetag'] = 'Remove';
diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html
index 727d31f..ad018eb 100644
--- a/plugins/tasklist/skins/larry/templates/mainview.html
+++ b/plugins/tasklist/skins/larry/templates/mainview.html
@@ -84,9 +84,15 @@
<li class="flagged" role="radio" aria-checked="false" aria-labelledby="aria-radio-flagged"><a href="#flagged" id="aria-radio-flagged"><roundcube:label name="tasklist.flagged" /><span class="count"></span></a></li>
<li class="today" role="radio" aria-checked="false" aria-labelledby="aria-radio-today"><a href="#today" id="aria-radio-today"><roundcube:label name="tasklist.today" /><span class="count"></span></a></li>
<li class="tomorrow" role="radio" aria-checked="false" aria-labelledby="aria-radio-tomorrow"><a href="#tomorrow" id="aria-radio-tomorrow"><roundcube:label name="tasklist.tomorrow" /><span class="count"></span></a></li>
+ <roundcube:if condition="env:tasklist_driver != 'kolab'" />
<li class="week" role="radio" aria-checked="false" aria-labelledby="aria-radio-week"><a href="#week" id="aria-radio-week"><roundcube:label name="tasklist.next7days" /></a></li>
+ <roundcube:endif />
<li class="later" role="radio" aria-checked="false" aria-labelledby="aria-radio-later"><a href="#later" id="aria-radio-later"><roundcube:label name="tasklist.later" /></a></li>
<li class="nodate" role="radio" aria-checked="false" aria-labelledby="aria-radio-nodate"><a href="#nodate" id="aria-radio-nodate"><roundcube:label name="tasklist.nodate" ucfirst="true" /></a></li>
+ <roundcube:if condition="env:tasklist_driver == 'kolab'" />
+ <li class="mytasks" role="radio" aria-checked="false" aria-labelledby="aria-radio-mytasks"><a href="#mytasks" id="aria-radio-mytasks" title="<roundcube:label name='tasklist.mytaskstitle'/>"><roundcube:label name="tasklist.mytasks" /></a></li>
+ <li class="assigned" role="radio" aria-checked="false" aria-labelledby="aria-radio-assigned"><a href="#assigned" id="aria-radio-assigned" title="<roundcube:label name='tasklist.assignedtitle'/>"><roundcube:label name="tasklist.assigned" /></a></li>
+ <roundcube:endif />
<li class="complete" role="radio" aria-checked="false" aria-labelledby="aria-radio-complete"><a href="#complete" id="aria-radio-complete"><roundcube:label name="tasklist.complete" /><span class="count"></span></a></li>
</ul>
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index a0ff22f..ffb0129 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -40,6 +40,8 @@ function rcube_tasklist_ui(settings)
var FILTER_MASK_OVERDUE = 32;
var FILTER_MASK_FLAGGED = 64;
var FILTER_MASK_COMPLETE = 128;
+ var FILTER_MASK_ASSIGNED = 256;
+ var FILTER_MASK_MYTASKS = 512;
var filter_masks = {
all: FILTER_MASK_ALL,
@@ -50,11 +52,12 @@ function rcube_tasklist_ui(settings)
nodate: FILTER_MASK_NODATE,
overdue: FILTER_MASK_OVERDUE,
flagged: FILTER_MASK_FLAGGED,
- complete: FILTER_MASK_COMPLETE
+ complete: FILTER_MASK_COMPLETE,
+ assigned: FILTER_MASK_ASSIGNED,
+ mytasks: FILTER_MASK_MYTASKS
};
/* private vars */
- var selector = 'all';
var tagsfilter = [];
var filtermask = FILTER_MASK_ALL;
var loadstate = { filter:-1, lists:'', search:null };
@@ -245,9 +248,21 @@ function rcube_tasklist_ui(settings)
list_tasks();
// register event handlers for UI elements
- $('#taskselector a').click(function(e){
- if (!$(this).parent().hasClass('inactive'))
- list_tasks(this.href.replace(/^.*#/, ''));
+ $('#taskselector a').click(function(e) {
+ if (!$(this).parent().hasClass('inactive')) {
+ var selector = this.href.replace(/^.*#/, ''),
+ mask = filter_masks[selector],
+ shift = e.shiftKey || e.ctrlKey || e.metaKey;
+
+ if (!shift)
+ filtermask = mask; // reset selection on regular clicks
+ else if (filtermask & mask)
+ filtermask -= mask;
+ else
+ filtermask |= mask;
+
+ list_tasks();
+ }
return false;
});
@@ -606,11 +621,10 @@ function rcube_tasklist_ui(settings)
if (sel && filter_masks[sel] !== undefined) {
filtermask = filter_masks[sel];
- selector = sel;
}
var active = active_lists(),
- basefilter = filtermask == FILTER_MASK_COMPLETE ? FILTER_MASK_COMPLETE : FILTER_MASK_ALL,
+ basefilter = filtermask & FILTER_MASK_COMPLETE ? FILTER_MASK_COMPLETE : FILTER_MASK_ALL,
reload = force || active.join(',') != loadstate.lists || basefilter != loadstate.filter || loadstate.search != search_query;
if (active.length && reload) {
@@ -623,7 +637,16 @@ function rcube_tasklist_ui(settings)
render_tasklist();
$('#taskselector li.selected').removeClass('selected').attr('aria-checked', 'false');
- $('#taskselector li.'+selector).addClass('selected').attr('aria-checked', 'true');
+
+ // select all active selectors
+ if (filtermask > 0) {
+ $.each(filter_masks, function(sel, mask) {
+ if (filtermask & mask)
+ $('#taskselector li.'+sel).addClass('selected').attr('aria-checked', 'true');
+ });
+ }
+ else
+ $('#taskselector li.all').addClass('selected').attr('aria-checked', 'true');
}
/**
@@ -1876,10 +1899,14 @@ function rcube_tasklist_ui(settings)
}
});
+ $('#edit-tab-attendees').show();
$('#edit-attendees-form')[(allow_invitations?'show':'hide')]();
$('#edit-identities-list').val(identity_id);
$('#taskedit-organizer')[(organizer ? 'show' : 'hide')]();
}
+ else {
+ $('#edit-tab-attendees').hide();
+ }
// attachments
rcmail.enable_command('remove-attachment', list.editable);
@@ -2238,7 +2265,7 @@ function rcube_tasklist_ui(settings)
return cache[rec.id];
}
- var match = !filtermask || (filtermask & rec.mask) > 0;
+ var match = !filtermask || (filtermask & rec.mask) == filtermask;
// in focusview mode, only tasks from the selected list are allowed
if (focusview && rec.list != focusview)
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index 6dacf6f..9aca0df 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -32,6 +32,8 @@ class tasklist extends rcube_plugin
const FILTER_MASK_OVERDUE = 32;
const FILTER_MASK_FLAGGED = 64;
const FILTER_MASK_COMPLETE = 128;
+ const FILTER_MASK_ASSIGNED = 256;
+ const FILTER_MASK_MYTASKS = 512;
const SESSION_KEY = 'tasklist_temp';
@@ -44,6 +46,8 @@ class tasklist extends rcube_plugin
'overdue' => self::FILTER_MASK_OVERDUE,
'flagged' => self::FILTER_MASK_FLAGGED,
'complete' => self::FILTER_MASK_COMPLETE,
+ 'assigned' => self::FILTER_MASK_ASSIGNED,
+ 'mytasks' => self::FILTER_MASK_MYTASKS,
);
public $task = '?(?!login|logout).*';
@@ -1077,7 +1081,11 @@ class tasklist extends rcube_plugin
else if ($start > $weeklimit || ($rec['date'] && $duedate > $weeklimit))
$mask |= self::FILTER_MASK_LATER;
- // TODO: add mask for "assigned to me"
+ // add masks for assigned tasks
+ if ($this->is_organizer($rec) && !empty($rec['attendees']) && $this->is_attendee($rec) === false)
+ $mask |= self::FILTER_MASK_ASSIGNED;
+ else if (/*empty($rec['attendees']) ||*/ $this->is_attendee($rec) !== false)
+ $mask |= self::FILTER_MASK_MYTASKS;
return $mask;
}
More information about the commits
mailing list