--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -15,7 +15,8 @@
from ming.orm.declarative import MappedClass
from allura.model import Artifact, VersionedArtifact, Snapshot, project_orm_session, BaseAttachment
-from allura.model import User, Feed, Thread, Notification
+from allura.model import User, Feed, Thread, Notification, ProjectRole
+from allura.model import ACE, ALL_PERMISSIONS, DENY_ALL
from allura.lib import patience
from allura.lib import security
from allura.lib.search import search_artifact
@@ -322,6 +323,21 @@
@property
def open_or_closed(self):
return 'closed' if self.status in c.app.globals.set_of_closed_status_names else 'open'
+
+ def _get_private(self):
+ return bool(self.acl)
+
+ def _set_private(self, bool_flag):
+ if bool_flag:
+ role_developer = ProjectRole.by_name('Developer')._id
+ role_creator = self.reported_by.project_role()._id
+ self.acl = [
+ ACE.allow(role_developer, ALL_PERMISSIONS),
+ ACE.allow(role_creator, ALL_PERMISSIONS),
+ DENY_ALL]
+ else:
+ self.acl = []
+ private = property(_get_private, _set_private)
def commit(self):
VersionedArtifact.commit(self)
@@ -526,7 +542,6 @@
"""Query tickets, sorting and paginating the result."""
limit, page, start = g.handle_paging(limit, page, default=25)
q = cls.query.find(dict(query, app_config_id=c.app.config._id))
- count = q.count()
q = q.sort('ticket_num')
if sort:
field, direction = sort.split()
@@ -539,6 +554,7 @@
q = q.skip(start)
q = q.limit(limit)
tickets = [ t for t in q if security.has_access(t, 'read')() ]
+ count = len(tickets)
sortable_custom_fields=c.app.globals.sortable_custom_fields_shown_in_search()
if not columns:
columns = [dict(name='ticket_num', sort_name='ticket_num', label='Ticket Number', active=True),