services.resource-translation.inc in Services 6.2
Same filename and directory in other branches
Contains the necessary functionality for translating resources to services methods and vice versa.
File
services.resource-translation.incView source
<?php
/**
* @file
* Contains the necessary functionality for translating resources to services
* methods and vice versa.
*/
/**
* Returns the given resource as a set of services methods.
*
* @param array $resource
* A resource definition.
*
* @return array
* An array of services method definitions
*/
function _services_resource_as_services($resource) {
static $controllers = array(
'create' => 'create',
'delete' => 'delete',
'retrieve' => 'retrieve',
'update' => 'update',
'index' => 'index',
), $subcontrollers = array(
'relationships' => 'related',
'targeted actions' => 'targeted_action',
);
$methods = array();
$file = isset($resource['file']) ? $resource['file'] : array();
foreach ($controllers as $attr => $name) {
if (isset($resource[$attr])) {
$methods[] = _services_resource_controller_as_service($resource['name'], $name, $resource[$attr], $file);
}
}
foreach ($subcontrollers as $attr => $name) {
if (isset($resource[$attr])) {
foreach ($resource[$attr] as $sc_name => $controller) {
$methods[] = _services_resource_controller_as_service($resource['name'], $name . '_' . $sc_name, $controller, $file);
}
}
}
if (isset($resource['actions'])) {
foreach ($resource['actions'] as $sc_name => $controller) {
$methods[] = _services_resource_controller_as_service($resource['name'], 'action_' . $sc_name, $controller, $file);
}
}
return $methods;
}
/**
* Helper function for _services_resource_as_services() that turns a resource
* controller into a service method.
*/
function _services_resource_controller_as_service($resource, $name, $controller, $file) {
$method = array_merge($controller, array(
'method' => $resource . '_resource.' . $name,
));
if (!empty($file) && !empty($method['file'])) {
$method['file'] = $file;
}
return $method;
}
/**
* Turns an array of services methods into resources where all methods are
* added as actions. A 'menu.get'-method would be added as a 'get'-action on
* the resource 'service_menu'.
*
* @param array $services
* An array of service methods.
*
* @return array
* An array of resource definitions.
*/
function _services_services_as_resources($services) {
$resources = array();
foreach ($services as $service) {
$signature = preg_split('/\\./', $service['method']);
$controller = $service;
$controller['args'] = array();
foreach ($service['args'] as $arg) {
$arg['source'] = array(
'data' => $arg['name'],
);
$controller['args'][] = $arg;
}
$resources['service_' . $signature[0]]['actions'][$signature[1]] = $controller;
}
return $resources;
}
Functions
Name | Description |
---|---|
_services_resource_as_services | Returns the given resource as a set of services methods. |
_services_resource_controller_as_service | Helper function for _services_resource_as_services() that turns a resource controller into a service method. |
_services_services_as_resources | Turns an array of services methods into resources where all methods are added as actions. A 'menu.get'-method would be added as a 'get'-action on the resource 'service_menu'. |