You are here

function spaces_menu_access in Spaces 7.3

Same name and namespace in other branches
  1. 6.3 spaces.module \spaces_menu_access()
  2. 6.2 spaces.module \spaces_menu_access()
  3. 7 spaces.module \spaces_menu_access()

Spaces menu access callback. Allows space types to manage access as related to their space workflow. See hook_menu_alter() for how menu access callbacks / arguments get passed.

1 string reference to 'spaces_menu_access'
spaces_menu_alter in ./spaces.module
Implements hook_menu_alter().

File

./spaces.module, line 685

Code

function spaces_menu_access() {

  // Run the standard Drupal access check.
  $args = func_get_args();
  $access_callback = array_pop($args);
  if (empty($access_callback) || call_user_func_array($access_callback, $args)) {
    $map = features_get_component_map('node');

    // Determine the access callback to use by inspecting args.
    if ($access_callback == 'node_access' && $args[0] == 'create') {
      $node_type = str_replace('-', '_', $args[1]);
      $feature = !empty($map[$node_type]) ? reset($map[$node_type]) : NULL;
      if ($feature) {
        return spaces_access_feature('create', $feature);
      }
    }
    else {
      foreach (array_filter($args, 'is_object') as $object) {
        $type = isset($object->nid) ? 'node' : (isset($object->uid) ? 'user' : NULL);
        if ($type && spaces_is_spaces_object($type, $object)) {
          if ($type == 'node') {
            $feature = !empty($map[$object->type]) ? reset($map[$object->type]) : NULL;
            if ($feature) {
              return spaces_access_feature('view', $feature);
            }
          }
          elseif ($type == 'user') {
            return spaces_access_user('view', $object);
          }
          break;
        }
      }
    }
    return TRUE;
  }
  return FALSE;
}