| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: features.user.inc,v 1.1.2.15 2010/08/05 20:59:41 yhahn Exp $ 3 4 /** 5 * Implementation of hook_features_api(). 6 */ 7 function user_features_api() { 8 return array( 9 'user_role' => array( 10 'name' => t('Roles'), 11 'feature_source' => TRUE, 12 'default_hook' => 'user_default_roles', 13 'default_file' => FEATURES_DEFAULTS_INCLUDED, 14 ), 15 'user_permission' => array( 16 'name' => t('Permissions'), 17 'feature_source' => TRUE, 18 'default_hook' => 'user_default_permissions', 19 'default_file' => FEATURES_DEFAULTS_INCLUDED, 20 ), 21 // DEPRECATED 22 'user' => array( 23 'name' => t('Permissions'), 24 'feature_source' => FALSE, 25 ) 26 ); 27 } 28 29 /** 30 * Implementation of hook_features_export(). 31 * DEPRECATED: This implementation simply migrates deprecated `user` items 32 * to the `user_permission` type. 33 */ 34 function user_features_export($data, &$export, $module_name = '') { 35 $pipe = array(); 36 foreach ($data as $perm) { 37 $pipe['user_permission'][] = $perm; 38 } 39 return $pipe; 40 } 41 42 /** 43 * Implementation of hook_features_export(). 44 */ 45 function user_permission_features_export($data, &$export, $module_name = '') { 46 $export['dependencies']['features'] = 'features'; 47 48 // Ensure the modules that provide the given permissions are included as dependencies. 49 $map = _user_features_permission_map(); 50 foreach ($data as $perm) { 51 if (isset($map[$perm])) { 52 $perm_module = $map[$perm]; 53 $export['dependencies'][$perm_module] = $perm_module; 54 $export['features']['user_permission'][$perm] = $perm; 55 } 56 } 57 58 return array(); 59 } 60 61 /** 62 * Implementation of hook_features_export_options(). 63 */ 64 function user_permission_features_export_options() { 65 $options = array(); 66 foreach (module_list() as $module) { 67 $prefix = check_plain($module) .': '; 68 if ($permissions = module_invoke($module, 'perm')) { 69 foreach ($permissions as $permission) { 70 $options[$permission] = $prefix . check_plain($permission); 71 } 72 } 73 } 74 asort($options); 75 return $options; 76 } 77 78 /** 79 * Implementation of hook_features_export_render(). 80 */ 81 function user_permission_features_export_render($module, $data) { 82 $code = array(); 83 $code[] = ' $permissions = array();'; 84 $code[] = ''; 85 86 $permissions = _user_features_get_permissions(); 87 88 foreach ($data as $perm_name) { 89 $permission = array(); 90 $permission['name'] = $perm_name; 91 if (isset($permissions[$perm_name])) { 92 sort($permissions[$perm_name]); 93 $permission['roles'] = $permissions[$perm_name]; 94 } 95 else { 96 $permission['roles'] = array(); 97 } 98 $perm_identifier = features_var_export($perm_name); 99 $perm_export = features_var_export($permission, ' '); 100 $code[] = " // Exported permission: {$perm_name}"; 101 $code[] = " \$permissions[{$perm_identifier}] = {$perm_export};"; 102 $code[] = ""; 103 } 104 105 $code[] = ' return $permissions;'; 106 $code = implode("\n", $code); 107 return array('user_default_permissions' => $code); 108 } 109 110 /** 111 * Implementation of hook_features_revert(). 112 */ 113 function user_permission_features_revert($module) { 114 user_permission_features_rebuild($module); 115 } 116 117 /** 118 * Implementation of hook_features_rebuild(). 119 * Iterate through default permissions and update the permissions map. 120 * 121 * @param $module 122 * The module whose default user permissions should be rebuilt. 123 */ 124 function user_permission_features_rebuild($module) { 125 if ($defaults = features_get_default('user_permission', $module)) { 126 $roles = _features_get_roles(); 127 foreach ($defaults as $permission) { 128 $perm = $permission['name']; 129 130 // Add permissions for any roles that should have them. 131 foreach ($permission['roles'] as $role) { 132 if (isset($roles[$role]) && !in_array($perm, $roles[$role]['perm'])) { 133 $roles[$role]['perm'][] = $perm; 134 } 135 } 136 137 // Remove permissions for any roles that shouldn't have them. 138 foreach (array_keys($roles) as $role) { 139 if (in_array($perm, $roles[$role]['perm']) && !in_array($role, $permission['roles'])) { 140 $position = array_search($perm, $roles[$role]['perm']); 141 unset($roles[$role]['perm'][$position]); 142 } 143 } 144 } 145 // Write the updated permissions. 146 _user_features_save_roles($roles); 147 } 148 } 149 150 /** 151 * Implementation of hook_features_export(). 152 */ 153 function user_role_features_export($data, &$export, $module_name = '') { 154 $export['dependencies']['features'] = 'features'; 155 $map = features_get_default_map('user_role', 'name'); 156 foreach ($data as $role) { 157 // Role is provided by another module. Add dependency. 158 if (isset($map[$role]) && $map[$role] != $module_name) { 159 $export['dependencies'][$map[$role]] = $map[$role]; 160 } 161 // Export. 162 else { 163 $export['features']['user_role'][$role] = $role; 164 } 165 } 166 return array(); 167 } 168 169 /** 170 * Implementation of hook_features_export_options(). 171 */ 172 function user_role_features_export_options() { 173 $options = drupal_map_assoc(array_keys(_features_get_roles())); 174 asort($options); 175 return $options; 176 } 177 178 /** 179 * Implementation of hook_features_export_render(). 180 */ 181 function user_role_features_export_render($module, $data) { 182 $code = array(); 183 $code[] = ' $roles = array();'; 184 $code[] = ''; 185 186 $roles = _features_get_roles(); 187 foreach ($data as $role) { 188 if (isset($roles[$role])) { 189 $object = array('name' => $role); 190 $role_identifier = features_var_export($role); 191 $role_export = features_var_export($object , ' '); 192 $code[] = " // Exported role: {$role}"; 193 $code[] = " \$roles[{$role_identifier}] = {$role_export};"; 194 $code[] = ""; 195 } 196 } 197 198 $code[] = ' return $roles;'; 199 $code = implode("\n", $code); 200 return array('user_default_roles' => $code); 201 } 202 203 /** 204 * Implementation of hook_features_revert(). 205 */ 206 function user_role_features_revert($module) { 207 user_role_features_rebuild($module); 208 } 209 210 /** 211 * Implementation of hook_features_rebuild(). 212 */ 213 function user_role_features_rebuild($module) { 214 if ($defaults = features_get_default('user_role', $module)) { 215 $roles = _features_get_roles(); 216 foreach ($defaults as $role) { 217 if (!isset($roles[$role['name']])) { 218 drupal_write_record('role', $role); 219 } 220 } 221 } 222 } 223 224 /** 225 * Generate a perm to module mapping. 226 */ 227 function _user_features_permission_map($reset = FALSE) { 228 static $map; 229 if (!isset($map) || $reset) { 230 $map = array(); 231 foreach (module_implements('perm') as $module) { 232 if ($permissions = module_invoke($module, 'perm')) { 233 foreach ($permissions as $permission) { 234 $map[$permission] = $module; 235 } 236 } 237 } 238 } 239 return $map; 240 } 241 242 /** 243 * Represent the current state of permissions as a perm to role name array map. 244 */ 245 function _user_features_get_permissions() { 246 $result = db_query("SELECT p.perm, r.name FROM {role} r INNER JOIN {permission} p ON p.rid = r.rid ORDER BY r.rid ASC, p.perm ASC"); 247 $permissions = array(); 248 while ($row = db_fetch_object($result)) { 249 $role = $row->name; 250 $role_perms = explode(', ', $row->perm); 251 foreach ($role_perms as $perm) { 252 if (!isset($permissions[$perm])) { 253 $permissions[$perm] = array(); 254 } 255 if(!in_array($role, $permissions[$perm])) { 256 $permissions[$perm][] = $role; 257 } 258 } 259 } 260 return $permissions; 261 } 262 263 /** 264 * Save/update an array of roles to the database. 265 */ 266 function _user_features_save_roles($roles) { 267 // Write the updated permissions. 268 foreach ($roles as $role) { 269 db_query("DELETE FROM {permission} WHERE rid = %d", $role['rid']); 270 $role['perm'] = implode(', ', $role['perm']); 271 drupal_write_record('permission', $role); 272 } 273 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |