You are here

function oa_access_cleanup_permissions in Open Atrium Core 7.2

Removes left over permissions that are no longer valid.

Parameters

string|NULL $module: (Optional) If specified it will only attempt to cleanup permissions for the given module; otherwise it'll do them all.

1 call to oa_access_cleanup_permissions()
OpenAtriumAccessTestCase::testCleanupPermissions in modules/oa_access/tests/oa_access.test

File

modules/oa_access/oa_access.module, line 746
Code for the Open Atrium Access module.

Code

function oa_access_cleanup_permissions($module = NULL) {
  $valid_permissions = oa_access_get_permissions();
  $query = db_select('oa_access', 'a')
    ->distinct()
    ->fields('a', array(
    'permission',
  ));
  if ($module) {
    $query
      ->condition('a.module', $module);
  }

  // Find all the permissions in the database which aren't declared by
  // hook_oa_access_permission().
  $invalid = array();
  foreach ($query
    ->execute() as $row) {
    if (!isset($valid_permissions[$row->permission])) {
      $invalid[] = $row->permission;
    }
  }

  // And delete them!
  if (!empty($invalid)) {
    db_delete('oa_access')
      ->condition('permission', $invalid, 'IN')
      ->execute();
  }
}