Daniel Lamb
9 years ago
5 changed files with 123 additions and 5 deletions
@ -0,0 +1,42 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Provides the callback implementations for the service. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* The POST callback for the deletion by Fedora URI service. |
||||||
|
* |
||||||
|
* @param array $args |
||||||
|
* JSON encoded arguments to delete function. |
||||||
|
* |
||||||
|
* @return array |
||||||
|
* JSON encoded response message. |
||||||
|
*/ |
||||||
|
function islandora_delete_by_fedora_uri_service_delete(array $args) { |
||||||
|
// Hack the Fedora path out of the POST data. |
||||||
|
$fedora_uri = $args['fedoraUri']; |
||||||
|
|
||||||
|
// Get entities identified by Fedora path. |
||||||
|
$query = new EntityFieldQuery(); |
||||||
|
$results = $query->fieldCondition('field_fedora_path', 'value', $fedora_uri) |
||||||
|
->execute(); |
||||||
|
|
||||||
|
// Delete 'em all. |
||||||
|
foreach ($results as $entity_type => $entities) { |
||||||
|
$ids = array_keys($entities); |
||||||
|
if (entity_delete_multiple($entity_type, $ids) === FALSE) { |
||||||
|
$response[] = "Could not delete any $entity_type identified by $fedora_uri."; |
||||||
|
} |
||||||
|
else { |
||||||
|
$response[] = "Deleted entities of type $entity_type with ids " . implode(', ', $ids) . "."; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!isset($response)) { |
||||||
|
$response[] = "Could not find any entities identified by $fedora_uri."; |
||||||
|
} |
||||||
|
|
||||||
|
return $response; |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
name = Islandora Delete By Fedora URI Service |
||||||
|
description = "Deletes Drupal nodes by Fedora URI. Needed for Sync to handle delete events that don't originate from Drupal." |
||||||
|
package = Islandora |
||||||
|
version = 7.x-dev |
||||||
|
core = 7.x |
||||||
|
dependencies[] = rest_server |
@ -0,0 +1,48 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* @file |
||||||
|
* Provides a service for deleting Drupal nodes by Fedora path. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_permission(). |
||||||
|
*/ |
||||||
|
function islandora_delete_by_fedora_uri_service_permission() { |
||||||
|
return array( |
||||||
|
'islandora delete by fedora uri' => array( |
||||||
|
'title' => t('Delete by Fedora URI.'), |
||||||
|
'description' => t('Allows external sources to delete Drupal nodes by Fedora URI.'), |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Implements hook_services_resources(). |
||||||
|
*/ |
||||||
|
function islandora_delete_by_fedora_uri_service_services_resources() { |
||||||
|
return array( |
||||||
|
'delete_by_fedora_uri' => array( |
||||||
|
'create' => array( |
||||||
|
'help' => t('Deletes a Drupal node by the Fedora URI supplied in the POST data.'), |
||||||
|
'file' => array( |
||||||
|
'type' => 'inc', |
||||||
|
'module' => 'islandora_delete_by_fedora_uri_service', |
||||||
|
'name' => 'include/islandora_delete_by_fedora_uri_service', |
||||||
|
), |
||||||
|
'callback' => 'islandora_delete_by_fedora_uri_service_delete', |
||||||
|
'access callback' => 'user_access', |
||||||
|
'access arguments' => array('islandora delete by fedora uri'), |
||||||
|
'args' => array( |
||||||
|
array( |
||||||
|
'name' => 'args', |
||||||
|
'type' => 'array', |
||||||
|
'description' => t("JSON data containing arguments to the delete function (e.g. the Fedora URI)"), |
||||||
|
'source' => 'data', |
||||||
|
'optional' => FALSE, |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
} |
Loading…
Reference in new issue