bean.services.inc in Bean (for Drupal 7) 7
Contains callbacks for service resource manipulation.
File
bean.services.incView source
<?php
/**
* @file
* Contains callbacks for service resource manipulation.
*/
/**
* Implements hook_services_resources().
*/
function bean_services_resources() {
return array(
'#api_version' => 3002,
'bean' => array(
'operations' => array(
'retrieve' => array(
'help' => t('This method returns a bean.'),
'callback' => 'bean_services_retrieve',
'access arguments' => array(
'view bean page',
),
'args' => array(
array(
'name' => 'bid',
'type' => 'int',
'description' => t('The id of the bean to get.'),
'source' => array(
'path' => '0',
),
'optional' => FALSE,
),
),
),
'create' => array(
'help' => t('This method creates a bean.'),
'callback' => 'bean_services_create',
'access callback' => 'bean_services_access',
'access arguments' => array(
'add',
),
'access arguments append' => TRUE,
'args' => array(
array(
'name' => 'data',
'type' => 'struct',
'description' => t('An object representing the bean.'),
'source' => 'data',
'optional' => FALSE,
),
),
),
'update' => array(
'help' => t('This method updates a bean.'),
'callback' => 'bean_services_update',
'access callback' => 'bean_services_access',
'access arguments' => array(
'edit',
),
'access arguments append' => TRUE,
'args' => array(
array(
'name' => 'bid',
'type' => 'int',
'description' => t('The id of the bean to update.'),
'source' => array(
'path' => '0',
),
'optional' => FALSE,
),
array(
'name' => 'data',
'type' => 'struct',
'description' => t('An object representing the bean.'),
'source' => 'data',
'optional' => FALSE,
),
),
),
'delete' => array(
'help' => t('This method deletes a bean.'),
'callback' => 'bean_services_delete',
'access callback' => 'bean_services_access',
'access arguments' => array(
'delete',
),
'access arguments append' => TRUE,
'args' => array(
array(
'name' => 'bid',
'type' => 'int',
'description' => t('The id of the bean to delete.'),
'source' => array(
'path' => '0',
),
'optional' => FALSE,
),
),
),
'index' => array(
'help' => t('This method returns a listing of beans.'),
'callback' => 'bean_services_index',
'access arguments' => array(
'administer beans',
),
'args' => array(
array(
'name' => 'page',
'optional' => TRUE,
'type' => 'int',
'description' => t('The zero-based index of the page to get, defaults to 0.'),
'default value' => 0,
'source' => array(
'param' => 'page',
),
),
array(
'name' => 'fields',
'optional' => TRUE,
'type' => 'string',
'description' => t('The fields to return.'),
'default value' => '*',
'source' => array(
'param' => 'fields',
),
),
array(
'name' => 'parameters',
'optional' => TRUE,
'type' => 'array',
'description' => t('Fields an values to filter the list by.'),
'default value' => array(),
'source' => array(
'param' => 'parameters',
),
),
array(
'name' => 'pagesize',
'optional' => TRUE,
'type' => 'int',
'description' => t('Number of records to get per page.'),
'default value' => 20,
'source' => array(
'param' => 'pagesize',
),
),
),
),
),
),
);
}
/**
* Adds a new bean to a node and returns the bid.
*
* @param $bean Bean
* An object as would be returned from bean_load().
* @return
* Unique identifier for the bean (bid) or errors if there was a problem.
*/
function bean_services_create($bean) {
if (empty($bean['type'])) {
return services_error(t('A type must be provided.'));
}
// Include the bean_form.
module_load_include('inc', 'bean', 'includes/bean.pages');
$bean_new = bean_create($bean);
// Setup form_state.
$form_state = array();
$form_state['values'] = $bean;
$form_state['values']['op'] = t('Save');
$form_state['build_info']['args'] = array(
&$bean_new,
);
$ret = drupal_form_submit('bean_form', $form_state);
// Error if needed.
if ($errors = form_get_errors()) {
return services_error(implode(" ", $errors), 406, array(
'form_errors' => $errors,
));
}
$bean = $form_state['bean'];
return array(
'bid' => $bean->bid,
'uri' => services_resource_uri(array(
'bean',
$bean->bid,
)),
);
}
/**
* Updates a bean and returns the bid.
*
* @param $bid
* Unique identifier for this bean.
* @param $bean Bean
* An object as would be returned from bean_load().
* @return
* Unique identifier for the bean (bid) or FALSE if there was a problem.
*/
function bean_services_update($bid, $bean) {
// Include the bean_form.
module_load_include('inc', 'bean', 'includes/bean.pages');
$bean['bid'] = $bid;
$old_bean = bean_load($bid);
if (empty($old_bean)) {
return services_error(t('Bean @bid not found.', array(
'@bid' => $bid,
)), 404);
}
// Setup form_state.
$form_state = array();
$form_state['values'] = $bean;
$form_state['values']['op'] = t('Save');
$form_state['build_info']['args'] = array(
&$old_bean,
);
drupal_form_submit('bean_form', $form_state);
if ($errors = form_get_errors()) {
return services_error(implode(" ", $errors), 406, array(
'form_errors' => $errors,
));
}
return $bid;
}
/**
* Returns a specified bean.
*
* @param $bid
* Unique identifier for the specified bean.
* @return
* The bean object.
*/
function bean_services_retrieve($bid) {
return bean_load($bid);
}
/**
* Delete a bean.
*
* @param $bid
* Unique identifier of the bean to delete.
* @return
* True.
*/
function bean_services_delete($bid) {
$bean = bean_load($bid);
if (empty($bean)) {
return services_error(t('There is no bean found with id @bid.', array(
'@bid' => $bid,
)), 404);
}
// Delete bean.
bean_delete($bean);
// Clear the bean cache so an anonymous user sees that the bean was deleted.
bean_reset();
return TRUE;
}
/**
* Return an array of optionally paged bids based on a set of criteria.
*
* An example request might look like:
*
* http://domain/endpoint/bean?fields=bid,label¶meters[type]=mytype
*
* This would return an array of objects with only bid and label defined, where
* type = 'mytype'.
*
* @param $page
* Page number of results to return (in pages of 20).
* @param $fields
* The fields you want returned.
* @param $parameters
* An array containing fields and values used to build a sql WHERE clause
* indicating items to retrieve.
* @param $page_size
* Integer number of items to be returned.
* @return
* An array of bean objects.
**/
function bean_services_index($page, $fields, $parameters, $page_size) {
$bean_select = db_select('bean', 't')
->orderBy('delta', 'ASC');
services_resource_build_index_query($bean_select, $page, $fields, $parameters, $page_size, 'bean');
$results = services_resource_execute_index_query($bean_select);
return services_resource_build_index_list($results, 'bean', 'bid');
}
/**
* Access callback for the bean resource.
*
* @param $op
* The operation that's going to be performed.
* @param $args
* The arguments that will be passed to the callback.
* @return
* Whether access is given or not.
*/
function bean_services_access($op, $args) {
$bean = NULL;
if (!empty($args[0])) {
if (is_numeric($args[0])) {
$bean = bean_load($args[0]);
}
else {
if (is_array($args[1])) {
$bean = (object) $args[1];
}
}
}
if (!empty($args[0]) && !is_object($bean)) {
return FALSE;
}
return entity_access($op, 'bean', $bean);
}
Functions
Name | Description |
---|---|
bean_services_access | Access callback for the bean resource. |
bean_services_create | Adds a new bean to a node and returns the bid. |
bean_services_delete | Delete a bean. |
bean_services_index | Return an array of optionally paged bids based on a set of criteria. |
bean_services_resources | Implements hook_services_resources(). |
bean_services_retrieve | Returns a specified bean. |
bean_services_update | Updates a bean and returns the bid. |