store sort infos (by task/concept) in user's favorite data

This commit is contained in:
Helmut Merz 2015-03-25 15:09:52 +01:00
parent 9c09222762
commit a3e0cac006
6 changed files with 58 additions and 24 deletions

View file

@ -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)

View file

@ -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):

View file

@ -75,7 +75,7 @@ So we are now ready to query the favorites.
>>> favs = list(favorites.query(userName=johnCId))
>>> favs
[<Favorite ['27', 1, '33', '...']: {}>]
[<Favorite ['27', 1, '33', '...']: {'type': 'favorite'}>]
>>> list(favAdapted.list(johnC))
['27']

View file

@ -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):
for track in self.context.query(userName=personUid, taskId=uid):
if track.type == type:
changed = True
self.context.removeTrack(t)
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

View file

@ -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

View file

@ -74,9 +74,8 @@
<input type="hidden" name="form.action" value="create_workitem" />
<input type="hidden" name="id"
tal:attributes="value request/form/id|nothing" />
<p tal:content="view/sortInfo/results/fparam|string:???" />
<input type="hidden" name="sortinfo_results"
tal:attributes="value view/sortInfo/results/fparam|nothing" />
<!--<input type="hidden" name="sortinfo_results"
tal:attributes="value view/sortInfo/results/fparam|nothing" />-->
<div class="heading" i18n:translate="">Add Work Item</div>
<div>
<tal:type condition="view/showTypes">