| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 | 
							- <?php
 
- /**
 
-  * Implements hook_features_api().
 
-  */
 
- function user_features_api() {
 
-   return array(
 
-     'user_role' => array(
 
-       'name' => t('Roles'),
 
-       'feature_source' => TRUE,
 
-       'default_hook' => 'user_default_roles',
 
-       'default_file' => FEATURES_DEFAULTS_INCLUDED,
 
-     ),
 
-     'user_permission' => array(
 
-       'name' => t('Permissions'),
 
-       'feature_source' => TRUE,
 
-       'default_hook' => 'user_default_permissions',
 
-       'default_file' => FEATURES_DEFAULTS_INCLUDED,
 
-     ),
 
-   );
 
- }
 
- /**
 
-  * Implements hook_features_export().
 
-  */
 
- function user_permission_features_export($data, &$export, $module_name = '') {
 
-   $export['dependencies']['features'] = 'features';
 
-   // Ensure the modules that provide the given permissions are included as dependencies.
 
-   $map = user_permission_get_modules();
 
-   foreach ($data as $perm) {
 
-     $perm_name = $perm;
 
-     // Export vocabulary permissions using the machine name, instead of
 
-     // vocabulary id.
 
-     _user_features_change_term_permission($perm_name, 'machine_name');
 
-     if (isset($map[$perm_name])) {
 
-       $perm_module = $map[$perm_name];
 
-       $export['dependencies'][$perm_module] = $perm_module;
 
-       $export['features']['user_permission'][$perm] = $perm;
 
-     }
 
-   }
 
-   return array();
 
- }
 
- /**
 
-  * Implements hook_features_export_options().
 
-  */
 
- function user_permission_features_export_options() {
 
-   $modules = array();
 
-   $module_info = system_get_info('module');
 
-   foreach (module_implements('permission') as $module) {
 
-     $modules[$module] = $module_info[$module]['name'];
 
-   }
 
-   ksort($modules);
 
-   $options = array();
 
-   foreach ($modules as $module => $display_name) {
 
-     if ($permissions = module_invoke($module, 'permission')) {
 
-       foreach ($permissions as $perm => $perm_item) {
 
-         // Export vocabulary permissions using the machine name, instead of
 
-         // vocabulary id.
 
-         _user_features_change_term_permission($perm);
 
-         $options[$perm] = strip_tags("{$display_name}: {$perm_item['title']}");
 
-       }
 
-     }
 
-   }
 
-   return $options;
 
- }
 
- /**
 
-  * Implements hook_features_export_render().
 
-  */
 
- function user_permission_features_export_render($module, $data) {
 
-   $perm_modules = &drupal_static(__FUNCTION__ . '_perm_modules');
 
-   if (!isset($perm_modules)) {
 
-     $perm_modules = user_permission_get_modules();
 
-   }
 
-   $code = array();
 
-   $code[] = '  $permissions = array();';
 
-   $code[] = '';
 
-   $permissions = _user_features_get_permissions();
 
-   foreach ($data as $perm_name) {
 
-     $permission = array();
 
-     // Export vocabulary permissions using the machine name, instead of
 
-     // vocabulary id.
 
-     $perm = $perm_name;
 
-     _user_features_change_term_permission($perm_name, 'machine_name');
 
-     $permission['name'] = $perm;
 
-     if (!empty($permissions[$perm_name])) {
 
-       sort($permissions[$perm_name]);
 
-       $permission['roles'] = drupal_map_assoc($permissions[$perm_name]);
 
-     }
 
-     else {
 
-       $permission['roles'] = array();
 
-     }
 
-     if (isset($perm_modules[$perm_name])) {
 
-       $permission['module'] = $perm_modules[$perm_name];
 
-     }
 
-     $perm_identifier = features_var_export($perm);
 
-     $perm_export = features_var_export($permission, '  ');
 
-     $code[] = "  // Exported permission: {$perm_identifier}.";
 
-     $code[] = "  \$permissions[{$perm_identifier}] = {$perm_export};";
 
-     $code[] = "";
 
-   }
 
-   $code[] = '  return $permissions;';
 
-   $code = implode("\n", $code);
 
-   return array('user_default_permissions' => $code);
 
- }
 
- /**
 
-  * Implements hook_features_revert().
 
-  */
 
- function user_permission_features_revert($module) {
 
-   user_permission_features_rebuild($module);
 
- }
 
- /**
 
-  * Implements hook_features_rebuild().
 
-  * Iterate through default permissions and update the permissions map.
 
-  *
 
-  * @param $module
 
-  *   The module whose default user permissions should be rebuilt.
 
-  */
 
- function user_permission_features_rebuild($module) {
 
-   if ($defaults = features_get_default('user_permission', $module)) {
 
-     // Make sure the list of available node types is up to date, especially when
 
-     // installing multiple features at once, for example from an install profile
 
-     // or via drush.
 
-     node_types_rebuild();
 
-     $modules = user_permission_get_modules();
 
-     $roles = _user_features_get_roles();
 
-     $permissions_by_role = _user_features_get_permissions(FALSE);
 
-     foreach ($defaults as $permission) {
 
-       $perm = $permission['name'];
 
-       _user_features_change_term_permission($perm, 'machine_name');
 
-       if (empty($modules[$perm])) {
 
-         $args = array('!name' => $perm, '!module' => $module,);
 
-         $msg = t('Warning in features rebuild of !module. No module defines permission "!name".', $args);
 
-         drupal_set_message($msg, 'warning');
 
-         continue;
 
-       }
 
-       // Export vocabulary permissions using the machine name, instead of
 
-       // vocabulary id.
 
-       foreach ($roles as $role) {
 
-         if (in_array($role, $permission['roles'])) {
 
-           $permissions_by_role[$role][$perm] = TRUE;
 
-         }
 
-         else {
 
-           $permissions_by_role[$role][$perm] = FALSE;
 
-         }
 
-       }
 
-     }
 
-     // Write the updated permissions.
 
-     foreach ($roles as $rid => $role) {
 
-       if (isset($permissions_by_role[$role])) {
 
-         user_role_change_permissions($rid, $permissions_by_role[$role]);
 
-       }
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Implements hook_features_export().
 
-  */
 
- function user_role_features_export($data, &$export, $module_name = '') {
 
-   $export['dependencies']['features'] = 'features';
 
-   $map = features_get_default_map('user_role', 'name');
 
-   foreach ($data as $role) {
 
-     // Role is provided by another module. Add dependency.
 
-     if (isset($map[$role]) && $map[$role] != $module_name) {
 
-       $export['dependencies'][$map[$role]] = $map[$role];
 
-     }
 
-     // Export.
 
-     elseif(user_role_load_by_name($role)) {
 
-       $export['features']['user_role'][$role] = $role;
 
-     }
 
-   }
 
-   return array();
 
- }
 
- /**
 
-  * Implements hook_features_export_options().
 
-  */
 
- function user_role_features_export_options() {
 
-   return drupal_map_assoc(_user_features_get_roles(FALSE));
 
- }
 
- /**
 
-  * Implements hook_features_export_render().
 
-  */
 
- function user_role_features_export_render($module, $data) {
 
-   $code = array();
 
-   $code[] = '  $roles = array();';
 
-   $code[] = '';
 
-   foreach ($data as $name) {
 
-     if ($role = user_role_load_by_name($name)) {
 
-       unset($role->rid);
 
-       $role_identifier = features_var_export($name);
 
-       $role_export = features_var_export($role , '  ');
 
-       $code[] = "  // Exported role: {$name}.";
 
-       $code[] = "  \$roles[{$role_identifier}] = {$role_export};";
 
-       $code[] = "";
 
-     }
 
-   }
 
-   $code[] = '  return $roles;';
 
-   $code = implode("\n", $code);
 
-   return array('user_default_roles' => $code);
 
- }
 
- /**
 
-  * Implements hook_features_revert().
 
-  */
 
- function user_role_features_revert($module) {
 
-   user_role_features_rebuild($module);
 
- }
 
- /**
 
-  * Implements hook_features_rebuild().
 
-  */
 
- function user_role_features_rebuild($module) {
 
-   if ($defaults = features_get_default('user_role', $module)) {
 
-     foreach ($defaults as $role) {
 
-       $role = (object) $role;
 
-       if ($existing = user_role_load_by_name($role->name)) {
 
-         $role->rid = $existing->rid;
 
-       }
 
-       user_role_save($role);
 
-     }
 
-   }
 
- }
 
- /**
 
-  * Generate $rid => $role with role names untranslated.
 
-  */
 
- function _user_features_get_roles($builtin = TRUE) {
 
-   $roles = array();
 
-   foreach (user_roles() as $rid => $name) {
 
-     switch ($rid) {
 
-       case DRUPAL_ANONYMOUS_RID:
 
-         if ($builtin) {
 
-           $roles[$rid] = 'anonymous user';
 
-         }
 
-         break;
 
-       case DRUPAL_AUTHENTICATED_RID:
 
-         if ($builtin) {
 
-           $roles[$rid] = 'authenticated user';
 
-         }
 
-         break;
 
-       default:
 
-         $roles[$rid] = $name;
 
-         break;
 
-     }
 
-   }
 
-   return $roles;
 
- }
 
- /**
 
-  * Represent the current state of permissions as a perm to role name array map.
 
-  */
 
- function _user_features_get_permissions($by_role = TRUE) {
 
-   $map = user_permission_get_modules();
 
-   $roles = _user_features_get_roles();
 
-   $permissions = array();
 
-   foreach (user_role_permissions($roles) as $rid => $role_permissions) {
 
-     if ($by_role) {
 
-       foreach (array_keys(array_filter($role_permissions)) as $permission) {
 
-         if (isset($map[$permission])) {
 
-           $permissions[$permission][] = $roles[$rid];
 
-         }
 
-       }
 
-     }
 
-     else {
 
-       $permissions[$roles[$rid]] = array();
 
-       foreach ($role_permissions as $permission => $status) {
 
-         if (isset($map[$permission])) {
 
-           $permissions[$roles[$rid]][$permission] = $status;
 
-         }
 
-       }
 
-     }
 
-   }
 
-   return $permissions;
 
- }
 
 
  |