Merge pull request #3208 from eileenmcnaughton/comments
[civicrm-core.git] / CRM / Core / Permission.php
index d632e87d6063aa2d2384c16f54838cf5c152237b..3c30ad036be60a368e2dbc31aa62e6b864b14400 100644 (file)
@@ -471,6 +471,7 @@ class CRM_Core_Permission {
     static $permissions = NULL;
 
     if (!$permissions) {
+      $config = CRM_Core_Config::singleton();
       $prefix = ts('CiviCRM') . ': ';
       $permissions = self::getCorePermissions();
 
@@ -478,8 +479,6 @@ class CRM_Core_Permission {
         $permissions['administer Multiple Organizations'] = $prefix . ts('administer Multiple Organizations');
       }
 
-      $config = CRM_Core_Config::singleton();
-
       if (!$all) {
         $components = CRM_Core_Component::getEnabledComponents();
       }
@@ -498,7 +497,6 @@ class CRM_Core_Permission {
       }
 
       // Add any permissions defined in hook_civicrm_permission implementations.
-      $config = CRM_Core_Config::singleton();
       $module_permissions = $config->userPermissionClass->getAllModulePermissions();
       $permissions = array_merge($permissions, $module_permissions);
     }
@@ -506,6 +504,27 @@ class CRM_Core_Permission {
     return $permissions;
   }
 
+  static function getAnonymousPermissionsWarnings() {
+    static $permissions = array();
+    if (empty($permissions)) {
+      $permissions = array(
+        'administer CiviCRM'
+      );
+      $components = CRM_Core_Component::getComponents();
+      foreach ($components as $comp) {
+        if (!method_exists($comp, 'getAnonymousPermissionWarnings')) {
+          continue;
+        }
+        $permissions = array_merge($permissions, $comp->getAnonymousPermissionWarnings());
+      }
+    }
+    return $permissions;
+  }
+
+  static function validateForPermissionWarnings($anonymous_perms) {
+    return array_intersect($anonymous_perms, self::getAnonymousPermissionsWarnings());
+  }
+
   static function getCorePermissions() {
     $prefix = ts('CiviCRM') . ': ';
     $permissions = array(