<pre style='margin:0'>
Rainer Müller (raimue) pushed a commit to branch master
in repository trac.macports.org.

</pre>
<p><a href="https://github.com/macports/trac.macports.org/commit/12f6b290dd65557edde2ec7a88074b7134f2a968">https://github.com/macports/trac.macports.org/commit/12f6b290dd65557edde2ec7a88074b7134f2a968</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 12f6b29  Enable TicketReporterPermissionsPolicy
</span>12f6b29 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 12f6b290dd65557edde2ec7a88074b7134f2a968
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Thu Apr 5 21:51:37 2018 +0000

<span style='display:block; white-space:pre;color:#404040;'>    Enable TicketReporterPermissionsPolicy
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Allow ticket reporters to modify summary, description, and all other
</span><span style='display:block; white-space:pre;color:#404040;'>    fields of a ticket with a custom plugin.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/53755
</span>---
 .gitignore                                 |  1 +
 conf/trac.ini                              |  2 +-
 plugins/TicketReporterPermissionsPolicy.py | 34 ++++++++++++++++++++++++++++++
 3 files changed, 36 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/.gitignore b/.gitignore
</span><span style='display:block; white-space:pre;color:#808080;'>index dce4f7a..44e4214 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/.gitignore
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/.gitignore
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3,3 +3,4 @@
</span> /db/
 /attachments/
 /files/
<span style='display:block; white-space:pre;background:#e0ffe0;'>+*.pyc
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/conf/trac.ini b/conf/trac.ini
</span><span style='display:block; white-space:pre;color:#808080;'>index 79c089e..ae605e2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/conf/trac.ini
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/conf/trac.ini
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -372,7 +372,7 @@ jquery_ui_location =
</span> jquery_ui_theme_location = 
 mysqldump_path = mysqldump
 never_obfuscate_mailto = disabled
<span style='display:block; white-space:pre;background:#ffe0e0;'>-permission_policies = ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+permission_policies = TicketReporterPermissionsPolicy, ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
</span> permission_store = DefaultPermissionStore
 pg_dump_path = pg_dump
 resizable_textareas = enabled
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/plugins/TicketReporterPermissionsPolicy.py b/plugins/TicketReporterPermissionsPolicy.py
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..dd273d8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/plugins/TicketReporterPermissionsPolicy.py
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8 -*-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This is based on an example from the Trac CookBook:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.edgewall.org/wiki/CookBook/PermissionPolicies#GrantapermissiontotheTicketOwner
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.core import *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.perm import IPermissionPolicy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.resource import ResourceNotFound
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+from trac.ticket.model import Ticket
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+class TicketReporterPermissionsPolicy(Component):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    """Grants permissions to the ticket reporter."""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    implements(IPermissionPolicy)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    allowed_actions = (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        'TICKET_CHGPROP',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        'TICKET_EDIT_DESCRIPTION')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # IPermissionPolicy methods
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    def check_permission(self, action, username, resource, perm):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if action in self.allowed_actions and \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                resource is not None and \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                resource.realm == 'ticket' and \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                resource.id is not None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            try:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ticket = Ticket(self.env, resource.id)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            except ResourceNotFound:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                pass
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if ticket['reporter'] == username:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    return True
</span></pre><pre style='margin:0'>

</pre>