[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/features/includes/ -> features.user.inc (source)

   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  }


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7