You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.7 KiB
136 lines
3.7 KiB
<?php |
|
|
|
/** |
|
* @file |
|
* This is the new Islandora Collection module. |
|
*/ |
|
|
|
define('ISLANDORA_COLLECTION_CONTENT_TYPE', 'islandora_collection'); |
|
define('ISLANDORA_COLLECTION_RDF_TYPE', 'islandora:collection'); |
|
|
|
/** |
|
* Implements hook_views_api(). |
|
*/ |
|
function islandora_collection_views_api() { |
|
return array( |
|
'api' => 3.0, |
|
'path' => drupal_get_path('module', 'islandora_collection') . '/include', |
|
); |
|
} |
|
|
|
/** |
|
* Implements hook_node_info(). |
|
*/ |
|
function islandora_collection_node_info() { |
|
return array( |
|
ISLANDORA_COLLECTION_CONTENT_TYPE => array( |
|
'name' => t("Collection"), |
|
'base' => ISLANDORA_COLLECTION_CONTENT_TYPE, |
|
'description' => t("A Drupal node modeling an pcdm:Collection."), |
|
), |
|
); |
|
} |
|
|
|
/** |
|
* Implements hook_form(). |
|
*/ |
|
function islandora_collection_form($node, array &$form_state) { |
|
return node_content_form($node, $form_state); |
|
} |
|
|
|
/** |
|
* Implements hook_rdf_mapping(). |
|
*/ |
|
function islandora_collection_rdf_mapping() { |
|
module_load_include('inc', 'islandora', 'include/rdf_mapping'); |
|
$rdf_types = array( |
|
ISLANDORA_PCDM_COLLECTION_RDF_TYPE, |
|
ISLANDORA_COLLECTION_RDF_TYPE, |
|
); |
|
return islandora_get_default_rdf_mapping(ISLANDORA_COLLECTION_CONTENT_TYPE, $rdf_types); |
|
} |
|
|
|
/** |
|
* Implements hook_node_postinsert(). |
|
*/ |
|
function islandora_collection_node_postinsert($node) { |
|
if (isset($_SERVER['HTTP_IGNORE_HOOKS']) && strcmp(strtolower($_SERVER['HTTP_IGNORE_HOOKS']), "true") == 0) { |
|
return; |
|
} |
|
|
|
// Exit early if it's not a collection. |
|
if (strcmp($node->type, ISLANDORA_COLLECTION_CONTENT_TYPE) != 0) { |
|
return; |
|
} |
|
|
|
$nodes = entity_uuid_load('node', array($node->uuid)); |
|
|
|
// Exit early if the node never was successfully inserted in the database. |
|
if (empty($nodes)) { |
|
return; |
|
} |
|
|
|
$node = array_pop($nodes); |
|
// Don't forget the trailing slash. |
|
httprl_request("http://localhost:8181/islandora/rest/collection/", |
|
array( |
|
'method' => 'POST', |
|
'data' => json_encode($node), |
|
)); |
|
$response = httprl_send_request(); |
|
} |
|
|
|
/** |
|
* Implements hook_node_postupdate(). |
|
*/ |
|
function islandora_collection_node_postupdate($node) { |
|
if (isset($_SERVER['HTTP_IGNORE_HOOKS']) && strcmp(strtolower($_SERVER['HTTP_IGNORE_HOOKS']), "true") == 0) { |
|
return; |
|
} |
|
|
|
// Exit early if it's not a collection. |
|
if (strcmp($node->type, ISLANDORA_COLLECTION_CONTENT_TYPE) != 0) { |
|
return; |
|
} |
|
|
|
// Unfortunately, there's no way to tell if the db transaction got rolled |
|
// back in this hook, so we'll default to doing it anyway so as not to miss |
|
// any updates. Open to suggestions on this one. But we gotta do post_action |
|
// hooks otherwise things can get crazy if the db transaction hasn't closed. |
|
$nodes = entity_uuid_load('node', array($node->uuid)); |
|
|
|
// Exit early if something has gone wrong and there's no node info. |
|
if (empty($nodes)) { |
|
return; |
|
} |
|
|
|
$node = array_pop($nodes); |
|
$uuid = $node->uuid; |
|
httprl_request("http://localhost:8181/islandora/rest/collection/$uuid", |
|
array( |
|
'method' => 'PUT', |
|
'data' => json_encode($node), |
|
)); |
|
$response = httprl_send_request(); |
|
} |
|
|
|
/** |
|
* Implements hook_node_postdelete(). |
|
*/ |
|
function islandora_collection_node_postdelete($node) { |
|
if (isset($_SERVER['HTTP_IGNORE_HOOKS']) && strcmp(strtolower($_SERVER['HTTP_IGNORE_HOOKS']), "true") == 0) { |
|
return; |
|
} |
|
|
|
// Exit early if it's not a collection. |
|
if (strcmp($node->type, ISLANDORA_COLLECTION_CONTENT_TYPE) != 0) { |
|
return; |
|
} |
|
|
|
$uuid = $node->uuid; |
|
httprl_request("http://localhost:8181/islandora/rest/collection/$uuid", |
|
array( |
|
'method' => 'DELETE', |
|
)); |
|
$response = httprl_send_request(); |
|
}
|
|
|