function _services_raw_node_update in Services Client 7.2
Same name and namespace in other branches
- 7 services_raw/services_raw.inc \_services_raw_node_update()
Update node calling raw node_save.
Parameters
$nid: Nid of saved node
$node: Array of node that needs to be saved
Return value
array|mixed
1 string reference to '_services_raw_node_update'
- _services_raw_services_resources in services_raw/
services_raw.inc - Provides API definition of provided services objects and operations.
File
- services_raw/
services_raw.inc, line 507 - Custom services definition and implementation of all callbacks.
Code
function _services_raw_node_update($nid, $node) {
// Load original node resource
module_load_include('inc', 'services', 'resources/node_resource');
// Adds backwards compatibility with regression fixed in #1083242
$node = _services_arg_value($node, 'node');
$node['nid'] = $nid;
$old_node = node_load($nid);
if (empty($old_node->nid)) {
return services_error(t('Node @nid not found', array(
'@nid' => $nid,
)), 404);
}
// Add missing attributes from original node
$node += (array) $old_node;
// If revision is not included load revision of existing node
if (empty($node['vid']) && $old_node->vid) {
$node['vid'] = $old_node->vid;
}
// Assign username to the node from $user created at auth step.
if (isset($node['name']) && !isset($node['uid'])) {
$account = user_load_by_name($node['name']);
if (!empty($account)) {
$node['uid'] = $account->uid;
}
else {
unset($node['name']);
}
}
if (!isset($node['name']) && !isset($node['uid'])) {
global $user;
$node['name'] = $user->name;
$node['uid'] = $user->uid;
}
// Validate the node. If there is validation error Exception will be thrown
// so code below won't be executed.
_node_resource_validate_type($node);
// Check if call isn't trying to change node type
if ($old_node->type != $node['type']) {
return services_error(t("You can't change node type via services"), 406);
}
try {
// Prepare node defaults
$node = (object) $node;
// Prevent loops
// this is apparently over-zealous as it stands and prevents insight
// from getting updated at all.
//$node->_services_client['visted'][] = services_client_get_id();
node_object_prepare($node);
node_save($node);
if (empty($node->nid)) {
return services_error(t('Error when saving node.'), 406);
}
} catch (Exception $e) {
return services_error(t('Error when saving node.'), 406, array(
'error' => $e
->getMessage(),
));
}
$result = array(
'nid' => $node->nid,
);
if ($uri = services_resource_uri(array(
'node',
$node->nid,
))) {
$result['uri'] = $uri;
}
return $result;
}