annotate sites/all/modules/features/includes/features.user.inc @ 4:ce11bbd8f642

added modules
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:38:44 +0100
parents
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2
danielebarchiesi@4 3 /**
danielebarchiesi@4 4 * Implements hook_features_api().
danielebarchiesi@4 5 */
danielebarchiesi@4 6 function user_features_api() {
danielebarchiesi@4 7 return array(
danielebarchiesi@4 8 'user_role' => array(
danielebarchiesi@4 9 'name' => t('Roles'),
danielebarchiesi@4 10 'feature_source' => TRUE,
danielebarchiesi@4 11 'default_hook' => 'user_default_roles',
danielebarchiesi@4 12 'default_file' => FEATURES_DEFAULTS_INCLUDED,
danielebarchiesi@4 13 ),
danielebarchiesi@4 14 'user_permission' => array(
danielebarchiesi@4 15 'name' => t('Permissions'),
danielebarchiesi@4 16 'feature_source' => TRUE,
danielebarchiesi@4 17 'default_hook' => 'user_default_permissions',
danielebarchiesi@4 18 'default_file' => FEATURES_DEFAULTS_INCLUDED,
danielebarchiesi@4 19 ),
danielebarchiesi@4 20 );
danielebarchiesi@4 21 }
danielebarchiesi@4 22
danielebarchiesi@4 23 /**
danielebarchiesi@4 24 * Implements hook_features_export().
danielebarchiesi@4 25 */
danielebarchiesi@4 26 function user_permission_features_export($data, &$export, $module_name = '') {
danielebarchiesi@4 27 $export['dependencies']['features'] = 'features';
danielebarchiesi@4 28
danielebarchiesi@4 29 // Ensure the modules that provide the given permissions are included as dependencies.
danielebarchiesi@4 30 $map = user_permission_get_modules();
danielebarchiesi@4 31 foreach ($data as $perm) {
danielebarchiesi@4 32 $perm_name = $perm;
danielebarchiesi@4 33 // Export vocabulary permissions using the machine name, instead of
danielebarchiesi@4 34 // vocabulary id.
danielebarchiesi@4 35 _user_features_change_term_permission($perm_name, 'machine_name');
danielebarchiesi@4 36 if (isset($map[$perm_name])) {
danielebarchiesi@4 37 $perm_module = $map[$perm_name];
danielebarchiesi@4 38 $export['dependencies'][$perm_module] = $perm_module;
danielebarchiesi@4 39 $export['features']['user_permission'][$perm] = $perm;
danielebarchiesi@4 40 }
danielebarchiesi@4 41 }
danielebarchiesi@4 42
danielebarchiesi@4 43 return array();
danielebarchiesi@4 44 }
danielebarchiesi@4 45
danielebarchiesi@4 46 /**
danielebarchiesi@4 47 * Implements hook_features_export_options().
danielebarchiesi@4 48 */
danielebarchiesi@4 49 function user_permission_features_export_options() {
danielebarchiesi@4 50 $modules = array();
danielebarchiesi@4 51 $module_info = system_get_info('module');
danielebarchiesi@4 52 foreach (module_implements('permission') as $module) {
danielebarchiesi@4 53 $modules[$module_info[$module]['name']] = $module;
danielebarchiesi@4 54 }
danielebarchiesi@4 55 ksort($modules);
danielebarchiesi@4 56
danielebarchiesi@4 57 $options = array();
danielebarchiesi@4 58 foreach ($modules as $display_name => $module) {
danielebarchiesi@4 59 if ($permissions = module_invoke($module, 'permission')) {
danielebarchiesi@4 60 foreach ($permissions as $perm => $perm_item) {
danielebarchiesi@4 61 // Export vocabulary permissions using the machine name, instead of
danielebarchiesi@4 62 // vocabulary id.
danielebarchiesi@4 63 _user_features_change_term_permission($perm);
danielebarchiesi@4 64 $options[$perm] = strip_tags("{$display_name}: {$perm_item['title']}");
danielebarchiesi@4 65 }
danielebarchiesi@4 66 }
danielebarchiesi@4 67 }
danielebarchiesi@4 68 return $options;
danielebarchiesi@4 69 }
danielebarchiesi@4 70
danielebarchiesi@4 71 /**
danielebarchiesi@4 72 * Implements hook_features_export_render().
danielebarchiesi@4 73 */
danielebarchiesi@4 74 function user_permission_features_export_render($module, $data) {
danielebarchiesi@4 75 $perm_modules = &drupal_static(__FUNCTION__ . '_perm_modules');
danielebarchiesi@4 76 if (!isset($perm_modules)) {
danielebarchiesi@4 77 $perm_modules = user_permission_get_modules();
danielebarchiesi@4 78 }
danielebarchiesi@4 79
danielebarchiesi@4 80 $code = array();
danielebarchiesi@4 81 $code[] = ' $permissions = array();';
danielebarchiesi@4 82 $code[] = '';
danielebarchiesi@4 83
danielebarchiesi@4 84 $permissions = _user_features_get_permissions();
danielebarchiesi@4 85
danielebarchiesi@4 86 foreach ($data as $perm_name) {
danielebarchiesi@4 87 $permission = array();
danielebarchiesi@4 88 // Export vocabulary permissions using the machine name, instead of
danielebarchiesi@4 89 // vocabulary id.
danielebarchiesi@4 90 $perm = $perm_name;
danielebarchiesi@4 91 _user_features_change_term_permission($perm_name, 'machine_name');
danielebarchiesi@4 92 $permission['name'] = $perm;
danielebarchiesi@4 93 if (!empty($permissions[$perm_name])) {
danielebarchiesi@4 94 sort($permissions[$perm_name]);
danielebarchiesi@4 95 $permission['roles'] = drupal_map_assoc($permissions[$perm_name]);
danielebarchiesi@4 96 }
danielebarchiesi@4 97 else {
danielebarchiesi@4 98 $permission['roles'] = array();
danielebarchiesi@4 99 }
danielebarchiesi@4 100 if (isset($perm_modules[$perm_name])) {
danielebarchiesi@4 101 $permission['module'] = $perm_modules[$perm_name];
danielebarchiesi@4 102 }
danielebarchiesi@4 103 $perm_identifier = features_var_export($perm);
danielebarchiesi@4 104 $perm_export = features_var_export($permission, ' ');
danielebarchiesi@4 105 $code[] = " // Exported permission: {$perm_identifier}.";
danielebarchiesi@4 106 $code[] = " \$permissions[{$perm_identifier}] = {$perm_export};";
danielebarchiesi@4 107 $code[] = "";
danielebarchiesi@4 108 }
danielebarchiesi@4 109
danielebarchiesi@4 110 $code[] = ' return $permissions;';
danielebarchiesi@4 111 $code = implode("\n", $code);
danielebarchiesi@4 112 return array('user_default_permissions' => $code);
danielebarchiesi@4 113 }
danielebarchiesi@4 114
danielebarchiesi@4 115 /**
danielebarchiesi@4 116 * Implements hook_features_revert().
danielebarchiesi@4 117 */
danielebarchiesi@4 118 function user_permission_features_revert($module) {
danielebarchiesi@4 119 user_permission_features_rebuild($module);
danielebarchiesi@4 120 }
danielebarchiesi@4 121
danielebarchiesi@4 122 /**
danielebarchiesi@4 123 * Implements hook_features_rebuild().
danielebarchiesi@4 124 * Iterate through default permissions and update the permissions map.
danielebarchiesi@4 125 *
danielebarchiesi@4 126 * @param $module
danielebarchiesi@4 127 * The module whose default user permissions should be rebuilt.
danielebarchiesi@4 128 */
danielebarchiesi@4 129 function user_permission_features_rebuild($module) {
danielebarchiesi@4 130 if ($defaults = features_get_default('user_permission', $module)) {
danielebarchiesi@4 131 // Make sure the list of available node types is up to date, especially when
danielebarchiesi@4 132 // installing multiple features at once, for example from an install profile
danielebarchiesi@4 133 // or via drush.
danielebarchiesi@4 134 node_types_rebuild();
danielebarchiesi@4 135
danielebarchiesi@4 136 $modules = user_permission_get_modules();
danielebarchiesi@4 137 $roles = _user_features_get_roles();
danielebarchiesi@4 138 $permissions_by_role = _user_features_get_permissions(FALSE);
danielebarchiesi@4 139 foreach ($defaults as $permission) {
danielebarchiesi@4 140 $perm = $permission['name'];
danielebarchiesi@4 141 _user_features_change_term_permission($perm, 'machine_name');
danielebarchiesi@4 142 if (empty($modules[$perm])) {
danielebarchiesi@4 143 $args = array('!name' => $perm, '!module' => $module,);
danielebarchiesi@4 144 $msg = t('Warning in features rebuild of !module. No module defines permission "!name".', $args);
danielebarchiesi@4 145 drupal_set_message($msg, 'warning');
danielebarchiesi@4 146 continue;
danielebarchiesi@4 147 }
danielebarchiesi@4 148 // Export vocabulary permissions using the machine name, instead of
danielebarchiesi@4 149 // vocabulary id.
danielebarchiesi@4 150 foreach ($roles as $role) {
danielebarchiesi@4 151 if (in_array($role, $permission['roles'])) {
danielebarchiesi@4 152 $permissions_by_role[$role][$perm] = TRUE;
danielebarchiesi@4 153 }
danielebarchiesi@4 154 else {
danielebarchiesi@4 155 $permissions_by_role[$role][$perm] = FALSE;
danielebarchiesi@4 156 }
danielebarchiesi@4 157 }
danielebarchiesi@4 158 }
danielebarchiesi@4 159 // Write the updated permissions.
danielebarchiesi@4 160 foreach ($roles as $rid => $role) {
danielebarchiesi@4 161 if (isset($permissions_by_role[$role])) {
danielebarchiesi@4 162 user_role_change_permissions($rid, $permissions_by_role[$role]);
danielebarchiesi@4 163 }
danielebarchiesi@4 164 }
danielebarchiesi@4 165 }
danielebarchiesi@4 166 }
danielebarchiesi@4 167
danielebarchiesi@4 168 /**
danielebarchiesi@4 169 * Implements hook_features_export().
danielebarchiesi@4 170 */
danielebarchiesi@4 171 function user_role_features_export($data, &$export, $module_name = '') {
danielebarchiesi@4 172 $export['dependencies']['features'] = 'features';
danielebarchiesi@4 173 $map = features_get_default_map('user_role', 'name');
danielebarchiesi@4 174 foreach ($data as $role) {
danielebarchiesi@4 175 // Role is provided by another module. Add dependency.
danielebarchiesi@4 176 if (isset($map[$role]) && $map[$role] != $module_name) {
danielebarchiesi@4 177 $export['dependencies'][$map[$role]] = $map[$role];
danielebarchiesi@4 178 }
danielebarchiesi@4 179 // Export.
danielebarchiesi@4 180 elseif(user_role_load_by_name($role)) {
danielebarchiesi@4 181 $export['features']['user_role'][$role] = $role;
danielebarchiesi@4 182 }
danielebarchiesi@4 183 }
danielebarchiesi@4 184 return array();
danielebarchiesi@4 185 }
danielebarchiesi@4 186
danielebarchiesi@4 187 /**
danielebarchiesi@4 188 * Implements hook_features_export_options().
danielebarchiesi@4 189 */
danielebarchiesi@4 190 function user_role_features_export_options() {
danielebarchiesi@4 191 return drupal_map_assoc(_user_features_get_roles(FALSE));
danielebarchiesi@4 192 }
danielebarchiesi@4 193
danielebarchiesi@4 194 /**
danielebarchiesi@4 195 * Implements hook_features_export_render().
danielebarchiesi@4 196 */
danielebarchiesi@4 197 function user_role_features_export_render($module, $data) {
danielebarchiesi@4 198 $code = array();
danielebarchiesi@4 199 $code[] = ' $roles = array();';
danielebarchiesi@4 200 $code[] = '';
danielebarchiesi@4 201
danielebarchiesi@4 202 foreach ($data as $name) {
danielebarchiesi@4 203 if ($role = user_role_load_by_name($name)) {
danielebarchiesi@4 204 unset($role->rid);
danielebarchiesi@4 205 $role_identifier = features_var_export($name);
danielebarchiesi@4 206 $role_export = features_var_export($role , ' ');
danielebarchiesi@4 207 $code[] = " // Exported role: {$name}.";
danielebarchiesi@4 208 $code[] = " \$roles[{$role_identifier}] = {$role_export};";
danielebarchiesi@4 209 $code[] = "";
danielebarchiesi@4 210 }
danielebarchiesi@4 211 }
danielebarchiesi@4 212
danielebarchiesi@4 213 $code[] = ' return $roles;';
danielebarchiesi@4 214 $code = implode("\n", $code);
danielebarchiesi@4 215 return array('user_default_roles' => $code);
danielebarchiesi@4 216 }
danielebarchiesi@4 217
danielebarchiesi@4 218 /**
danielebarchiesi@4 219 * Implements hook_features_revert().
danielebarchiesi@4 220 */
danielebarchiesi@4 221 function user_role_features_revert($module) {
danielebarchiesi@4 222 user_role_features_rebuild($module);
danielebarchiesi@4 223 }
danielebarchiesi@4 224
danielebarchiesi@4 225 /**
danielebarchiesi@4 226 * Implements hook_features_rebuild().
danielebarchiesi@4 227 */
danielebarchiesi@4 228 function user_role_features_rebuild($module) {
danielebarchiesi@4 229 if ($defaults = features_get_default('user_role', $module)) {
danielebarchiesi@4 230 foreach ($defaults as $role) {
danielebarchiesi@4 231 $role = (object) $role;
danielebarchiesi@4 232 if ($existing = user_role_load_by_name($role->name)) {
danielebarchiesi@4 233 $role->rid = $existing->rid;
danielebarchiesi@4 234 }
danielebarchiesi@4 235 user_role_save($role);
danielebarchiesi@4 236 }
danielebarchiesi@4 237 }
danielebarchiesi@4 238 }
danielebarchiesi@4 239
danielebarchiesi@4 240 /**
danielebarchiesi@4 241 * Generate $rid => $role with role names untranslated.
danielebarchiesi@4 242 */
danielebarchiesi@4 243 function _user_features_get_roles($builtin = TRUE) {
danielebarchiesi@4 244 $roles = array();
danielebarchiesi@4 245 foreach (user_roles() as $rid => $name) {
danielebarchiesi@4 246 switch ($rid) {
danielebarchiesi@4 247 case DRUPAL_ANONYMOUS_RID:
danielebarchiesi@4 248 if ($builtin) {
danielebarchiesi@4 249 $roles[$rid] = 'anonymous user';
danielebarchiesi@4 250 }
danielebarchiesi@4 251 break;
danielebarchiesi@4 252 case DRUPAL_AUTHENTICATED_RID:
danielebarchiesi@4 253 if ($builtin) {
danielebarchiesi@4 254 $roles[$rid] = 'authenticated user';
danielebarchiesi@4 255 }
danielebarchiesi@4 256 break;
danielebarchiesi@4 257 default:
danielebarchiesi@4 258 $roles[$rid] = $name;
danielebarchiesi@4 259 break;
danielebarchiesi@4 260 }
danielebarchiesi@4 261 }
danielebarchiesi@4 262 return $roles;
danielebarchiesi@4 263 }
danielebarchiesi@4 264
danielebarchiesi@4 265 /**
danielebarchiesi@4 266 * Represent the current state of permissions as a perm to role name array map.
danielebarchiesi@4 267 */
danielebarchiesi@4 268 function _user_features_get_permissions($by_role = TRUE) {
danielebarchiesi@4 269 $map = user_permission_get_modules();
danielebarchiesi@4 270 $roles = _user_features_get_roles();
danielebarchiesi@4 271 $permissions = array();
danielebarchiesi@4 272 foreach (user_role_permissions($roles) as $rid => $role_permissions) {
danielebarchiesi@4 273 if ($by_role) {
danielebarchiesi@4 274 foreach (array_keys(array_filter($role_permissions)) as $permission) {
danielebarchiesi@4 275 if (isset($map[$permission])) {
danielebarchiesi@4 276 $permissions[$permission][] = $roles[$rid];
danielebarchiesi@4 277 }
danielebarchiesi@4 278 }
danielebarchiesi@4 279 }
danielebarchiesi@4 280 else {
danielebarchiesi@4 281 $permissions[$roles[$rid]] = array();
danielebarchiesi@4 282 foreach ($role_permissions as $permission => $status) {
danielebarchiesi@4 283 if (isset($map[$permission])) {
danielebarchiesi@4 284 $permissions[$roles[$rid]][$permission] = $status;
danielebarchiesi@4 285 }
danielebarchiesi@4 286 }
danielebarchiesi@4 287 }
danielebarchiesi@4 288 }
danielebarchiesi@4 289 return $permissions;
danielebarchiesi@4 290 }