&$resource) { foreach ($class_info as $class_name => $class) { if (!isset($resource[$class_name])) { continue; } foreach (array_keys($resource[$class_name]) as $action_name) { $controllers["{$resource_name}/{$class['class_singular']}/{$action_name}"] = &$resource[$class_name][$action_name]; } } } // Make sure that we got a access callback for all resources foreach ($controllers as &$controller) { if (!empty($controller['file'])) { // Convert old-style file references to something that fits module_load_include() better. if (!empty($controller['file']['file']) && empty($controller['file']['type'])) { $controller['file']['type'] = $controller['file']['file']; } } if (!isset($controller['access callback'])) { $controller['access callback'] = 'user_access'; } } // This hook is deprecated and will be removed in next versions of services. // Use hook_services_resources_alter instead. drupal_alter('services_resources_post_processing', $resources, $endpoint); // Do some endpoint-dependent processing. if ($endpoint) { // Let the authentication modules alter our controllers foreach ($endpoint->authentication as $auth_module => $auth_settings) { services_auth_invoke($auth_module, 'alter_controllers', $auth_settings, $controllers, $endpoint); } // Apply any aliases from endpoint $aliased = array(); foreach ($resources as $key => $def) { $def['key'] = $key; if (!empty($def['endpoint']['alias'])) { $aliased[$def['endpoint']['alias']] = $def; } else { $aliased[$key] = $def; } } $resources = $aliased; } return $resources; } /** * Upgrades old resource definition to the newer format. * * @param int $from * The API version that the resource was written for. * @param array $resources * The resource definitions. * @param array $version_info * Optional. The version info array as returned from services_resource_api_version_info(). * @return void */ function _services_resource_upgrade($from, &$resources, $version_info = NULL) { module_load_include('inc', 'services', 'includes/services.resource_update'); // Get version info if needed. if ($version_info == NULL) { $version_info = services_resource_api_version_info(); } // Run upgrades. foreach ($version_info['versions'] as $update) { if ($update > $from) { call_user_func_array("services_resource_api_update_{$update}", array(&$resources)); } } } /** * Applies the endpoint to a set of resources. Resources and controllers that * aren't supported will be removed (if $strict is set to TRUE) and both * resources and controllers will get the 'endpoint' attribute set. * * @param array $resources * An array of resources that the endpoint should be applied on. * @param array $endpoint * A endpoint information array. * @param bool $strict * Optional. * @return void */ function _services_apply_endpoint(&$resources, $endpoint, $strict = TRUE) { if (is_array($endpoint) && isset($endpoint['build_info'])) { $endpoint = $endpoint['build_info']['args'][0]; } $classes = array_keys(services_operation_class_info()); foreach ($resources as $name => &$resource) { $cres = ($endpoint && isset($endpoint->resources[$name])) ? $endpoint->resources[$name] : array(); if (isset($resource['key']) && $resource['key'] !== $name && $endpoint && isset($endpoint->resources[$resource['key']])) { $cres = $endpoint->resources[$resource['key']]; } $resource['endpoint'] = $cres; if ($strict && empty($cres)) { unset($resources[$name]); } else { foreach ($classes as $class) { if (!empty($resource[$class])) { foreach ($resource[$class] as $op => $def) { $cop = isset($cres[$class][$op]) ? $cres[$class][$op] : array(); if (empty($cop) || !$cop['enabled']) { if ($strict) { unset($resource[$class][$op]); } } else { $resource[$class][$op]['endpoint'] = empty($cop['settings']) ? array() : $cop['settings']; if (isset($cres['alias'])) { $resource[$class][$op]['endpoint']['alias'] = $cres['alias']; } } } } } } } } /** * Supplies the resource definitions for Drupal core data * * @return array */ function _services_core_resources() { module_load_include('inc', 'services', 'resources/comment_resource'); module_load_include('inc', 'services', 'resources/file_resource'); module_load_include('inc', 'services', 'resources/node_resource'); module_load_include('inc', 'services', 'resources/system_resource'); module_load_include('inc', 'services', 'resources/taxonomy_resource'); module_load_include('inc', 'services', 'resources/user_resource'); $resources = array( '#api_version' => 3002, ); $resources += _comment_resource_definition(); $resources += _file_resource_definition(); $resources += _node_resource_definition(); $resources += _system_resource_definition(); $resources += _taxonomy_resource_definition(); $resources += _user_resource_definition(); return $resources; }