added permissions and menu cleanup
authorJagadedes <jagadees.pillai@zyxware.com>
Thu, 4 Dec 2014 09:09:30 +0000 (14:39 +0530)
committerJagadedes <jagadees.pillai@zyxware.com>
Thu, 4 Dec 2014 09:09:30 +0000 (14:39 +0530)
README.md
wci.php
xml/Menu/wci.xml

index dcaeaab37822ba75d7fced435a2484e162fa23b2..d7b0104bb74aed5941bb38a9054992683c637369 100644 (file)
--- a/README.md
+++ b/README.md
@@ -38,4 +38,11 @@ Mailing list subscription feature also exposed though widget. To use that first
 
 For getting better performance WCI widget uses a cache system. A timeout value can be provided 'Widget cache timeout' field for saving the widget in database for that specified time. Static widgets (widgets with out progress bar) will be caches permanently unless there is any change in the widget.
 
+### Permission
+
+There are 2 permissions associated with CiviWCI.
+'Administer CiviWCI' : All WCI menu items are available for user of this permission. Please enable it in your CMS permission page.
+
+'Access CiviWCI Widget' : To see the widget the user should have this permission. Enable this to anonymous users too, if they want to view the widget.
+
 CiviCRM-WCI development is sponsored by [Zyxware Tehnologies](http://www.zyxware.com).
diff --git a/wci.php b/wci.php
index 49755a659205c2e8d132e89b6c2d970064d08341..b8829193b2840f239a39c714c68aafb1b8fb7a59 100644 (file)
--- a/wci.php
+++ b/wci.php
@@ -128,15 +128,30 @@ function wci_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
   _wci_civix_civicrm_alterSettingsFolders($metaDataFolders);
 }
 
+function _getMenuKeyMax($menuArray) {
+  $max = array(max(array_keys($menuArray)));
+  foreach($menuArray as $v) {
+    if (!empty($v['child'])) {
+      $max[] = _getMenuKeyMax($v['child']);
+    }
+  }
+  return max($max);
+}
+
+function wci_civicrm_permission(&$permissions) {
+  $prefix = ts('CiviWCI') . ': '; // name of extension or module
+  $permissions += array(
+    'access CiviWCI Widget' => $prefix . ts('Access CiviWCI Widget'),
+    'administer CiviWCI' => $prefix . ts('Administer CiviWCI'),
+  );
+}
+
 function wci_civicrm_navigationMenu( &$params ) {
 
-  $navId = CRM_Core_DAO::singleValueQuery("SELECT max(id) FROM civicrm_navigation");
-  if (is_integer($navId)) {
-    $navId++;
-  }
+  $maxKey = _getMenuKeyMax($params);
   // Find the Help menu
   $helpID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Navigation', 'Help', 'id', 'name');
-  $params[$navId] = $params[$helpID];
+  $params[$maxKey] = $params[$helpID];
   // inserting WCI menu at the place of old help location
   $params[$helpID] = array (
     'attributes' => array (
@@ -147,7 +162,7 @@ function wci_civicrm_navigationMenu( &$params ) {
     'operator' => 'OR',
     'separator' => 0,
     'parentID' => 0,
-    'navID' => $navId,
+    'navID' => $maxKey,
     'active' => 1),
     'child' =>  array (
         '1' => array (
@@ -155,11 +170,11 @@ function wci_civicrm_navigationMenu( &$params ) {
         'label' => ts('New Widget'),
         'name' => 'new_widget',
         'url' => 'civicrm/wci/widget/add',
-        'permission' => 'access CiviReport,access CiviContribute',
+        'permission' => 'administer CiviWCI',
         'operator' => 'OR',
         'separator' => 1,
-        'parentID' => $navId,
-        'navID' => $navId+1,
+        'parentID' => $maxKey,
+        'navID' => $maxKey+1,
         'active' => 1)),
 
         '2' => array (
@@ -167,11 +182,11 @@ function wci_civicrm_navigationMenu( &$params ) {
         'label' => ts('Manage Widgets'),
         'name' => 'manage_widget',
         'url' => 'civicrm/wci/widget?reset=1',
-        'permission' => 'access CiviReport,access CiviContribute',
+        'permission' => 'administer CiviWCI',
         'operator' => 'OR',
         'separator' => 1,
-        'parentID' => $navId,
-        'navID' => $navId+2,
+        'parentID' => $maxKey,
+        'navID' => $maxKey+2,
         'active' => 1)),
 
         '3' => array (
@@ -179,11 +194,11 @@ function wci_civicrm_navigationMenu( &$params ) {
         'label' => ts('New Progress Bar'),
         'name' => 'new_progress_bar',
         'url' => 'civicrm/wci/progress-bar/add',
-        'permission' => 'access CiviReport,access CiviContribute',
+        'permission' => 'administer CiviWCI',
         'operator' => 'OR',
         'separator' => 1,
-        'parentID' => $navId,
-        'navID' => $navId+3,
+        'parentID' => $maxKey,
+        'navID' => $maxKey+3,
         'active' => 1)),
 
         '4' => array (
@@ -191,11 +206,11 @@ function wci_civicrm_navigationMenu( &$params ) {
         'label' => ts('Manage Progress Bars'),
         'name' => 'manage_progress_bar',
         'url' => 'civicrm/wci/progress-bar?reset=1',
-        'permission' => 'access CiviReport,access CiviContribute',
+        'permission' => 'administer CiviWCI',
         'operator' => 'OR',
         'separator' => 1,
-        'parentID' => $navId,
-        'navID' => $navId+4,
+        'parentID' => $maxKey,
+        'navID' => $maxKey+4,
         'active' => 1)),
 
         '5' => array (
@@ -203,11 +218,11 @@ function wci_civicrm_navigationMenu( &$params ) {
         'label' => ts('New Embed Code'),
         'name' => 'new_embed-code',
         'url' => 'civicrm/wci/embed-code/add',
-        'permission' => 'access CiviReport,access CiviContribute',
+        'permission' => 'administer CiviWCI',
         'operator' => 'OR',
         'separator' => 1,
-        'parentID' => $navId,
-        'navID' => $navId+5,
+        'parentID' => $maxKey,
+        'navID' => $maxKey+5,
         'active' => 1)),
 
         '6' => array (
@@ -215,11 +230,11 @@ function wci_civicrm_navigationMenu( &$params ) {
         'label' => ts('Manage Embed Code'),
         'name' => 'manage-emebed-code',
         'url' => 'civicrm/wci/embed-code?reset=1',
-        'permission' => 'access CiviReport,access CiviContribute',
+        'permission' => 'administer CiviWCI',
         'operator' => 'OR',
         'separator' => 1,
-        'parentID' => $navId,
-        'navID' => $navId+6,
+        'parentID' => $maxKey,
+        'navID' => $maxKey+6,
         'active' => 1)),
 
         '7' => array (
@@ -227,11 +242,11 @@ function wci_civicrm_navigationMenu( &$params ) {
         'label' => ts('Widget Settings'),
         'name' => 'widget-settings',
         'url' => 'civicrm/wci/settings?reset=1',
-        'permission' => 'access CiviReport,access CiviContribute',
+        'permission' => 'administer CiviWCI',
         'operator' => 'OR',
         'separator' => 1,
-        'parentID' => $navId,
-        'navID' => $navId+7,
+        'parentID' => $maxKey,
+        'navID' => $maxKey+7,
         'active' => 1)),
         ),
   );
index 7284cbbedb4f09482822f4b5ffbe720c4c9ed7f6..20724d557c5cb929561a6be164be3532ea2c2033 100644 (file)
@@ -4,54 +4,54 @@
     <path>civicrm/wci/widget/add</path>
     <page_callback>CRM_Wci_Form_CreateWidget</page_callback>
     <title>Create Widget</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/progress-bar/add</path>
     <page_callback>CRM_Wci_Form_ProgressBar</page_callback>
     <title>ProgressBar</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/test-bar/testadd</path>
     <page_callback>CRM_Wci_Form_TestBar</page_callback>
     <title>TestBar</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/progress-bar</path>
     <page_callback>CRM_Wci_Page_ProgressBarList</page_callback>
     <title>ProgressBarList</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/widget</path>
     <page_callback>CRM_Wci_Page_WidgetList</page_callback>
     <title>Widget List</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/settings</path>
     <page_callback>CRM_Wci_Form_WCISettings</page_callback>
     <title>WCISettings</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/embed-code/add</path>
     <page_callback>CRM_Wci_Form_NewEmbedCode</page_callback>
     <title>NewEmbedCode</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/embed-code</path>
     <page_callback>CRM_Wci_Page_ManageEmbedCode</page_callback>
     <title>ManageEmbedCode</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>administer CiviWCI</access_arguments>
   </item>
   <item>
     <path>civicrm/wci/embed</path>
     <page_callback>CRM_Wci_Page_Embed</page_callback>
     <title>Embed</title>
-    <access_arguments>access CiviCRM</access_arguments>
+    <access_arguments>access CiviWCI Widget</access_arguments>
   </item>
 </menu>