CRM-15371 - add tag management permission and move tag management out of admin path...
authorInforgetics <ferpicum@inforgetics.be>
Thu, 13 Oct 2016 21:34:41 +0000 (23:34 +0200)
committerInforgetics <ferpicum@inforgetics.be>
Thu, 13 Oct 2016 21:34:41 +0000 (23:34 +0200)
----------------------------------------
* CRM-15371: Allow non-administrative users to see and manage tags without Administer CiviCRM permission
  https://issues.civicrm.org/jira/browse/CRM-15371

CRM/Core/Block.php
CRM/Core/Permission.php
CRM/Core/xml/Menu/Admin.xml
CRM/Core/xml/Menu/Tag.xml [new file with mode: 0644]
CRM/Tag/Form/Edit.php [moved from CRM/Admin/Form/Tag.php with 98% similarity]
CRM/Tag/Page/Tag.php [moved from CRM/Admin/Page/Tag.php with 96% similarity]
CRM/Upgrade/Incremental/sql/4.7.13.mysql.tpl
templates/CRM/Admin/Page/ConfigTaskList.tpl
templates/CRM/Tag/Form/Edit.tpl [moved from templates/CRM/Admin/Form/Tag.tpl with 100% similarity]
templates/CRM/Tag/Page/Tag.tpl [moved from templates/CRM/Admin/Page/Tag.tpl with 98% similarity]
xml/templates/civicrm_navigation.tpl

index 857698a3f7c5834ef113e19fa8ce13f0994fdf86..766837ab13fd72ed9613572b0ed57c95efdaa39b 100644 (file)
@@ -396,10 +396,10 @@ class CRM_Core_Block {
         ));
       }
 
-      if (CRM_Core_Permission::check('administer CiviCRM')) {
+      if (CRM_Core_Permission::check('manage tags')) {
         $shortCuts = array_merge($shortCuts, array(
           array(
-            'path' => 'civicrm/admin/tag',
+            'path' => 'civicrm/tag',
             'query' => 'reset=1&action=add',
             'ref' => 'new-tag',
             'title' => ts('Tag'),
index 2e6aedfb40cc66faf7ae271c3b921ed3be2cf78c..6194e203ab4c2326684cdcb3f681820c3dc090a5 100644 (file)
@@ -767,6 +767,10 @@ class CRM_Core_Permission {
         $prefix . ts('translate CiviCRM'),
         ts('Allow User to enable multilingual'),
       ),
+      'manage tags' => array(
+        $prefix . ts('manage tags'),
+        ts('Create and rename tags'),
+      ),
       'administer reserved groups' => array(
         $prefix . ts('administer reserved groups'),
         ts('Edit and disable Reserved Groups (Needs Edit Groups)'),
index 74b9e9995023c09530c2d08c6d4e980bb695f974..e1b77920c61fbaf7995becd79afc9138dd86ab5b 100644 (file)
      <page_callback>CRM_UF_Form_AdvanceSetting</page_callback>
      <weight>0</weight>
   </item>
-  <item>
-     <path>civicrm/admin/tag</path>
-     <title>Tags (Categories)</title>
-     <desc>Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.</desc>
-     <page_callback>CRM_Admin_Page_Tag</page_callback>
-     <adminGroup>Customize Data and Screens</adminGroup>
-     <icon>admin/small/11.png</icon>
-     <weight>25</weight>
-  </item>
-  <item>
-     <path>civicrm/admin/tag/add</path>
-     <title>New Tag</title>
-     <page_callback>CRM_Admin_Page_Tag</page_callback>
-     <path_arguments>action=add</path_arguments>
-  </item>
   <item>
      <path>civicrm/admin/options/activity_type</path>
      <title>Activity Types</title>
diff --git a/CRM/Core/xml/Menu/Tag.xml b/CRM/Core/xml/Menu/Tag.xml
new file mode 100644 (file)
index 0000000..104f896
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+
+<menu>
+  <item>
+    <path>civicrm/tag</path>
+    <title>Tags (Categories)</title>
+    <desc>Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.</desc>
+    <page_callback>CRM_Tag_Page_Tag</page_callback>
+    <access_arguments>administer CiviCRM;manage tags</access_arguments>
+    <adminGroup>Customize Data and Screens</adminGroup>
+    <icon>admin/small/11.png</icon>
+    <weight>25</weight>
+  </item>
+  <item>
+    <path>civicrm/tag/add</path>
+    <title>New Tag</title>
+    <page_callback>CRM_Tag_Page_Tag</page_callback>
+    <path_arguments>action=add</path_arguments>
+    <access_arguments>administer CiviCRM;manage tags</access_arguments>
+  </item>
+</menu>
similarity index 98%
rename from CRM/Admin/Form/Tag.php
rename to CRM/Tag/Form/Edit.php
index 98bc99e023e3f0e9090eb0852e6a6c4d3250f8f9..be3b6db482b633f9536ae09dab6b9f70aa9492cc 100644 (file)
@@ -34,7 +34,7 @@
 /**
  * This class generates form components for Tag.
  */
-class CRM_Admin_Form_Tag extends CRM_Admin_Form {
+class CRM_Tag_Form_Edit extends CRM_Admin_Form {
   protected $_isTagSet;
 
   /**
@@ -52,7 +52,7 @@ class CRM_Admin_Form_Tag extends CRM_Admin_Form {
 
     if ($this->_action == CRM_Core_Action::DELETE) {
       if ($this->_id && $tag = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Tag', $this->_id, 'name', 'parent_id')) {
-        $url = CRM_Utils_System::url('civicrm/admin/tag', "reset=1");
+        $url = CRM_Utils_System::url('civicrm/tag', "reset=1");
         CRM_Core_Error::statusBounce(ts("This tag cannot be deleted. You must delete all its child tags ('%1', etc) prior to deleting this tag.", array(1 => $tag)), $url);
       }
       if ($this->_values['is_reserved'] == 1 && !CRM_Core_Permission::check('administer reserved tags')) {
similarity index 96%
rename from CRM/Admin/Page/Tag.php
rename to CRM/Tag/Page/Tag.php
index 938746037a3ef8e216f53c9a8f490feeeacf73b0..20ed8e097e95bea1fbb794529702a5781d60b5d2 100644 (file)
@@ -34,7 +34,7 @@
 /**
  * Page for displaying list of categories.
  */
-class CRM_Admin_Page_Tag extends CRM_Core_Page_Basic {
+class CRM_Tag_Page_Tag extends CRM_Core_Page_Basic {
 
   public $useLivePageJS = TRUE;
 
@@ -66,13 +66,13 @@ class CRM_Admin_Page_Tag extends CRM_Core_Page_Basic {
       self::$_links = array(
         CRM_Core_Action::UPDATE => array(
           'name' => ts('Edit'),
-          'url' => 'civicrm/admin/tag',
+          'url' => 'civicrm/tag',
           'qs' => 'action=update&id=%%id%%&reset=1',
           'title' => ts('Edit Tag'),
         ),
         CRM_Core_Action::DELETE => array(
           'name' => ts('Delete'),
-          'url' => 'civicrm/admin/tag',
+          'url' => 'civicrm/tag',
           'qs' => 'action=delete&id=%%id%%',
           'title' => ts('Delete Tag'),
         ),
@@ -93,7 +93,7 @@ class CRM_Admin_Page_Tag extends CRM_Core_Page_Basic {
    *   Classname of edit form.
    */
   public function editForm() {
-    return 'CRM_Admin_Form_Tag';
+    return 'CRM_Tag_Form_Edit';
   }
 
   /**
@@ -125,7 +125,7 @@ class CRM_Admin_Page_Tag extends CRM_Core_Page_Basic {
    *   user context.
    */
   public function userContext($mode = NULL) {
-    return 'civicrm/admin/tag';
+    return 'civicrm/tag';
   }
 
   /**
@@ -135,7 +135,7 @@ class CRM_Admin_Page_Tag extends CRM_Core_Page_Basic {
    *   Classname of delete form.
    */
   public function deleteForm() {
-    return 'CRM_Admin_Form_Tag';
+    return 'CRM_Tag_Form_Edit';
   }
 
   /**
index 7e2bb5b6ab9acdbf06a15e62d67d9b748fc9bc5a..99ee850bc9dab7e8ca225148e1edca2c7563a772 100644 (file)
@@ -4,3 +4,18 @@
 ALTER TABLE  `civicrm_price_field_value` CHANGE  `deductible_amount`  `non_deductible_amount` DECIMAL( 20, 2 ) NOT NULL DEFAULT  '0.00' COMMENT 'Portion of total amount which is NOT tax deductible.';
 
 ALTER TABLE  `civicrm_line_item` CHANGE  `deductible_amount`  `non_deductible_amount` DECIMAL( 20, 2 ) NOT NULL DEFAULT  '0.00' COMMENT 'Portion of total amount which is NOT tax deductible.';
+
+-- CRM-15371 Manage tags with new *manage tags* permission (used to need *administer CiviCRM* permission)
+UPDATE civicrm_navigation SET
+  `url` = 'civicrm/tag?reset=1&action=add',
+  `permission` = 'manage tags'
+WHERE `name` = 'Manage Tags (Categories)';
+
+UPDATE civicrm_navigation SET
+  `url` = 'civicrm/admin/tag?reset=1',
+  `permission` = 'manage tags'
+WHERE `name` = 'New Tag';
+
+UPDATE civicrm_navigation SET
+  `url` = 'civicrm/admin/tag?reset=1'
+WHERE `name` = 'Tags (Categories)';
index 1070571eee8cf2757cadc06360755e1617c93b0f..ff23a0be4cb896c879d04b14e286e0edfd73f450 100644 (file)
         <td colspan="2">{ts}Organize your contacts{/ts}</td>
     </tr>
     <tr class="even">
-        <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/tag" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle}">{ts}Tags (Categories){/ts}</a></td>
+        <td class="tasklist nowrap"><a href="{crmURL p="civicrm/tag" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle}">{ts}Tags (Categories){/ts}</a></td>
         <td>{ts}Tags can be assigned to any contact record, and are a convenient way to find contacts. You can create as many tags as needed to organize and segment your records.{/ts}</td>
     </tr>
     <tr class="even">
similarity index 98%
rename from templates/CRM/Admin/Page/Tag.tpl
rename to templates/CRM/Tag/Page/Tag.tpl
index bb6dfd9289e33944027520d94ce2e2450c0ac2a9..f79b083fa7f05b05b4315a9f2286efc4cda2c3e3 100644 (file)
@@ -27,7 +27,7 @@
 {capture assign=docLink}{docURL page="user/organising-your-data/groups-and-tags"}{/capture}
 
 {if $action eq 1 or $action eq 2 or $action eq 8}
-    {include file="CRM/Admin/Form/Tag.tpl"}
+    {include file="CRM/Tag/Form/Edit.tpl"}
 {else}
 <div class="crm-content-block">
     <div class="help">
@@ -91,7 +91,7 @@
     {else}
         <div class="messages status no-popup">
         <div class="icon inform-icon"></div>&nbsp;
-            {capture assign=crmURL}{crmURL p='civicrm/admin/tag' q="action=add&reset=1"}{/capture}
+            {capture assign=crmURL}{crmURL p='civicrm/tag' q="action=add&reset=1"}{/capture}
             {ts 1=$crmURL}There are no Tags present. You can <a href='%1'>add one</a>.{/ts}
         </div>
     {/if}
index fcb2ceb36348cb16693c60c65ebc88dbf4e4ab6c..38fd1f8e1200dd8a586a530b7ea4694abf50a8fa 100644 (file)
@@ -110,8 +110,8 @@ VALUES
     ( @domainID, 'civicrm/import/activity?reset=1',                         '{ts escape="sql" skip="true"}Import Activities{/ts}',      'Import Activities',    'import contacts',  '',             @contactlastID, '1', '1',   8 ),
     ( @domainID, 'civicrm/group/add?reset=1',                               '{ts escape="sql" skip="true"}New Group{/ts}',              'New Group',            'edit groups',      '',             @contactlastID, '1', NULL,  9 ),
     ( @domainID, 'civicrm/group?reset=1',                                   '{ts escape="sql" skip="true"}Manage Groups{/ts}',          'Manage Groups',        'access CiviCRM',   '',             @contactlastID, '1', '1',   10 ),
-    ( @domainID, 'civicrm/admin/tag?reset=1&action=add',                    '{ts escape="sql" skip="true"}New Tag{/ts}',                'New Tag',              'administer CiviCRM', '',           @contactlastID, '1', NULL, 11 ),
-    ( @domainID, 'civicrm/admin/tag?reset=1',                               '{ts escape="sql" skip="true"}Manage Tags (Categories){/ts}', 'Manage Tags (Categories)', 'administer CiviCRM', '',     @contactlastID, '1','1', 12 ),
+    ( @domainID, 'civicrm/tag?reset=1&action=add',                    '{ts escape="sql" skip="true"}New Tag{/ts}',                'New Tag',              'manage tags', '',           @contactlastID, '1', NULL, 11 ),
+    ( @domainID, 'civicrm/tag?reset=1',                               '{ts escape="sql" skip="true"}Manage Tags (Categories){/ts}', 'Manage Tags (Categories)', 'manage tags', '',     @contactlastID, '1','1', 12 ),
     ( @domainID, 'civicrm/contact/deduperules?reset=1',  '{ts escape="sql" skip="true"}Find and Merge Duplicate Contacts{/ts}', 'Find and Merge Duplicate Contacts', 'administer dedupe rules,merge duplicate contacts', 'OR', @contactlastID, '1', NULL, 13 );
 
 INSERT INTO civicrm_navigation
@@ -309,7 +309,7 @@ INSERT INTO civicrm_navigation
 VALUES
     ( @domainID, 'civicrm/admin/custom/group?reset=1',      '{ts escape="sql" skip="true"}Custom Fields{/ts}', 'Custom Fields',                             'administer CiviCRM', '',   @CustomizelastID, '1', NULL, 1 ),
     ( @domainID, 'civicrm/admin/uf/group?reset=1',          '{ts escape="sql" skip="true"}Profiles{/ts}', 'Profiles',                                       'administer CiviCRM', '',   @CustomizelastID, '1', NULL, 2 ),
-    ( @domainID, 'civicrm/admin/tag?reset=1',               '{ts escape="sql" skip="true"}Tags (Categories){/ts}', 'Tags (Categories)',                     'administer CiviCRM', '',   @CustomizelastID, '1', NULL, 3 ),
+    ( @domainID, 'civicrm/tag?reset=1',               '{ts escape="sql" skip="true"}Tags (Categories){/ts}', 'Tags (Categories)',                     'administer CiviCRM', '',   @CustomizelastID, '1', NULL, 3 ),
     ( @domainID, 'civicrm/admin/options/activity_type?reset=1', '{ts escape="sql" skip="true"}Activity Types{/ts}', 'Activity Types',   'administer CiviCRM', '',   @CustomizelastID, '1', NULL, 4 ),
     ( @domainID, 'civicrm/admin/reltype?reset=1',           '{ts escape="sql" skip="true"}Relationship Types{/ts}', 'Relationship Types',                   'administer CiviCRM', '',   @CustomizelastID, '1', NULL, 5 ),
     ( @domainID, 'civicrm/admin/options/subtype?reset=1',   '{ts escape="sql" skip="true"}Contact Types{/ts}','Contact Types',                              'administer CiviCRM', '',   @CustomizelastID, '1', NULL, 6 ),