From a3e0cac006aa339c3cec5710ca6783b4377676cd Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Wed, 25 Mar 2015 15:09:52 +0100 Subject: [PATCH] store sort infos (by task/concept) in user's favorite data --- browser/action.py | 4 +-- browser/common.py | 4 +++ organize/personal/README.txt | 2 +- organize/personal/favorite.py | 57 +++++++++++++++++++++++++++-------- organize/work/browser.py | 10 +++--- organize/work/work_macros.pt | 5 ++- 6 files changed, 58 insertions(+), 24 deletions(-) diff --git a/browser/action.py b/browser/action.py index 87514bb..56d24da 100644 --- a/browser/action.py +++ b/browser/action.py @@ -92,8 +92,8 @@ class DialogAction(Action): urlParams['fixed_type'] = 'yes' if self.viewTitle: urlParams['view_title'] = self.viewTitle - for k, v in self.page.sortInfo.items(): - urlParams['sortinfo_' + k] = v['fparam'] + #for k, v in self.page.sortInfo.items(): + # urlParams['sortinfo_' + k] = v['fparam'] urlParams.update(self.addParams) if self.target is not None: url = self.page.getUrlForTarget(self.target) diff --git a/browser/common.py b/browser/common.py index edd3ec7..e2a5ee3 100644 --- a/browser/common.py +++ b/browser/common.py @@ -67,6 +67,8 @@ from loops.common import adapted, baseObject from loops.config.base import DummyOptions from loops.i18n.browser import I18NView from loops.interfaces import IResource, IView, INode, ITypeConcept +from loops.organize.personal import favorite +from loops.organize.party import getPersonForUser from loops.organize.tracking import access from loops.organize.util import getRolesForPrincipal from loops.resource import Resource @@ -147,6 +149,8 @@ class SortableMixin(object): dir = 'asc' result[tableName] = dict( colName=fn, ascending=(dir=='asc'), fparam=v) + result = favorite.update(getPersonForUser( + self.context, self.request), self.target, 'sort', result) return result def isSortableColumn(self, tableName, colName): diff --git a/organize/personal/README.txt b/organize/personal/README.txt index ed19349..d058355 100644 --- a/organize/personal/README.txt +++ b/organize/personal/README.txt @@ -75,7 +75,7 @@ So we are now ready to query the favorites. >>> favs = list(favorites.query(userName=johnCId)) >>> favs - [] + [] >>> list(favAdapted.list(johnC)) ['27'] diff --git a/organize/personal/favorite.py b/organize/personal/favorite.py index 96a8b16..a2e99d8 100644 --- a/organize/personal/favorite.py +++ b/organize/personal/favorite.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2010 Helmut Merz helmutm@cy55.de +# Copyright (c) 2015 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,8 +18,6 @@ """ Base classes for a notification framework. - -$Id$ """ from zope.component import adapts @@ -39,17 +37,20 @@ class Favorites(object): def __init__(self, context): self.context = context - def list(self, person, sortKey=None): - for item in self.listTracks(person, sortKey): + def list(self, person, sortKey=None, type='favorite'): + for item in self.listTracks(person, sortKey, type): yield item.taskId - def listTracks(self, person, sortKey=None): + def listTracks(self, person, sortKey=None, type='favorite'): if person is None: return personUid = util.getUidForObject(person) if sortKey is None: sortKey = lambda x: -x.timeStamp for item in sorted(self.context.query(userName=personUid), key=sortKey): + if type is not None: + if item.type != type: + continue yield item def add(self, obj, person, data=None): @@ -57,21 +58,23 @@ class Favorites(object): return False uid = util.getUidForObject(obj) personUid = util.getUidForObject(person) - if self.context.query(userName=personUid, taskId=uid): - return False if data is None: - data = {} + data = {'type': 'favorite'} + for track in self.context.query(userName=personUid, taskId=uid): + if track.type == data['type']: # already present + return False return self.context.saveUserTrack(uid, 0, personUid, data) - def remove(self, obj, person): + def remove(self, obj, person, type='favorite'): if None in (obj, person): return False uid = util.getUidForObject(obj) personUid = util.getUidForObject(person) changed = False - for t in self.context.query(userName=personUid, taskId=uid): - changed = True - self.context.removeTrack(t) + for track in self.context.query(userName=personUid, taskId=uid): + if track.type == type: + changed = True + self.context.removeTrack(track) return changed @@ -81,3 +84,31 @@ class Favorite(Track): typeName = 'Favorite' + @property + def type(self): + return self.data.get('type') or 'favorite' + + +def update(person, task, type, data): + if person is not None: + favorites = task.getLoopsRoot().getRecordManager().get('favorites') + if favorites is None: + return data + personUid = util.getUidForObject(person) + taskUid = util.getUidForObject(task) + for fav in favorites.query(userName=personUid, taskId=taskUid): + if fav.data['type'] == 'sort': + fdata = fav.data['sortInfo'] + if not data: + data = fdata + else: + if data != fdata: + newData = fav.data + newData['sortInfo'] = data + fav.data = newData + break + else: + if data: + Favorites(favorites).add(task, person, + dict(type='sort', sortInfo=data)) + return data diff --git a/organize/work/browser.py b/organize/work/browser.py index 41afb8e..9bc303d 100644 --- a/organize/work/browser.py +++ b/organize/work/browser.py @@ -659,11 +659,11 @@ class CreateWorkItem(EditObject, BaseTrackView): url = self.view.virtualTargetUrl #url = self.request.URL # append sortinfo parameters: - urlParams = {} - for k, v in self.view.sortInfo.items(): - urlParams['sortinfo_' + k] = v['fparam'] - if urlParams: - url = '%s?%s' % (url, urlencode(urlParams)) + #urlParams = {} + #for k, v in self.view.sortInfo.items(): + # urlParams['sortinfo_' + k] = v['fparam'] + #if urlParams: + # url = '%s?%s' % (url, urlencode(urlParams)) self.request.response.redirect(url) return False diff --git a/organize/work/work_macros.pt b/organize/work/work_macros.pt index 8290af4..5e04470 100644 --- a/organize/work/work_macros.pt +++ b/organize/work/work_macros.pt @@ -74,9 +74,8 @@ -

- +

Add Work Item