- allow editing/creation of work items by others (creator, admin),

take party/userName from previous work item instead of current user
This commit is contained in:
Helmut Merz 2011-08-03 16:29:51 +02:00
parent 4ac8a4d24e
commit 28e8d54762
4 changed files with 28 additions and 9 deletions

View file

@ -6,6 +6,8 @@ $Id$
1.1 1.1
--- ---
- allow editing/creation of work items by others (creator, admin),
take party/userName from previous work item instead of current user
- field order: make sure title and description are always on top - field order: make sure title and description are always on top
- yellow pages: view task_candidates for selecting persons with required - yellow pages: view task_candidates for selecting persons with required
knowledge for task knowledge for task

View file

@ -33,6 +33,7 @@ from cybertools.browser.action import actions
from cybertools.tracking.browser import TrackView from cybertools.tracking.browser import TrackView
from loops.browser.action import DialogAction from loops.browser.action import DialogAction
from loops.browser.form import ObjectForm, EditObject from loops.browser.form import ObjectForm, EditObject
from loops.organize.party import getPersonForUser
from loops import util from loops import util
@ -95,6 +96,13 @@ class BaseTrackView(TrackView):
return dict(title=obj.title, url=url, obj=obj) return dict(title=obj.title, url=url, obj=obj)
return dict(title=value, url=None, obj=None) return dict(title=value, url=None, obj=None)
@Lazy
def personId(self):
p = getPersonForUser(self.context, self.request)
if p is not None:
return util.getUidForObject(p)
return self.request.principal.id
class ChangeView(BaseTrackView): class ChangeView(BaseTrackView):

View file

@ -36,6 +36,7 @@ from cybertools.meta.interfaces import IOptions
from cybertools.util import format from cybertools.util import format
from loops.browser.common import BaseView from loops.browser.common import BaseView
from loops.interfaces import IConcept, IResource from loops.interfaces import IConcept, IResource
from loops.organize.party import getPersonForUser
from loops.security.common import canAccessObject from loops.security.common import canAccessObject
from loops import util from loops import util
from loops.util import _ from loops.util import _
@ -289,6 +290,14 @@ class TrackDetails(BaseView):
url = node is not None and node.getUrlForTarget(obj) or '' url = node is not None and node.getUrlForTarget(obj) or ''
return dict(object=obj, title=obj.title, url=url) return dict(object=obj, title=obj.title, url=url)
@Lazy
def personId(self):
request = self.view.request
p = getPersonForUser(self.object, request)
if p is not None:
return util.getUidForObject(p)
return request.principal.id
@Lazy @Lazy
def action(self): def action(self):
return self.track.data.get('action', '') return self.track.data.get('action', '')

View file

@ -139,8 +139,7 @@ class WorkItemDetails(TrackDetails):
target=self.object, target=self.object,
addParams=dict(id=self.track.__name__)) addParams=dict(id=self.track.__name__))
actions = [info, WorkItemStateAction(self)] actions = [info, WorkItemStateAction(self)]
if (self.isLastInRun and if self.isLastInRun and self.allowedToEditWorkItem:
self.user['object'] == getPersonForUser(self.object, self.view.request)):
self.view.registerDojoDateWidget() self.view.registerDojoDateWidget()
self.view.registerDojoNumberWidget() self.view.registerDojoNumberWidget()
self.view.registerDojoTextarea() self.view.registerDojoTextarea()
@ -155,6 +154,14 @@ class WorkItemDetails(TrackDetails):
addParams=dict(id=self.track.__name__))) addParams=dict(id=self.track.__name__)))
return actions return actions
@Lazy
def allowedToEditWorkItem(self):
if checkPermission('loops.ManageSite', self.object):
return True
if self.track.data.get('creator') == self.personId:
return True
return self.user['object'] == getPersonForUser(self.object, self.view.request)
class WorkItemInfo(NodeView): class WorkItemInfo(NodeView):
""" Provides info box. """ Provides info box.
@ -418,13 +425,6 @@ class CreateWorkItem(EditObject, BaseTrackView):
workItems = self.loopsRoot.getRecordManager()['work'] workItems = self.loopsRoot.getRecordManager()['work']
return workItems.get(id) return workItems.get(id)
@Lazy
def personId(self):
p = getPersonForUser(self.context, self.request)
if p is not None:
return util.getUidForObject(p)
return self.request.principal.id
@Lazy @Lazy
def object(self): def object(self):
return self.target return self.target