Browse Source

Add hook for child relationships

pull/710/head
Jonathan Green 7 years ago
parent
commit
d0b49780ab
No known key found for this signature in database
GPG Key ID: E96938FA4DF26243
  1. 13
      includes/orphaned_objects.inc
  2. 18
      islandora.api.php
  3. 7
      islandora.module

13
includes/orphaned_objects.inc

@ -145,7 +145,7 @@ function islandora_get_orphaned_objects() {
$connection = islandora_get_tuque_connection();
// SPARQL: get orphaned objects, exclude any with a living parent.
$object_query = <<<EOQ
PREFIX islandora: <http://islandora.ca/ontology/relsext#>
!prefix
SELECT DISTINCT ?object ?title
WHERE {
?object <fedora-model:hasModel> <info:fedora/fedora-system:FedoraObject-3.0> ;
@ -169,11 +169,7 @@ WHERE {
FILTER (!bound(?liveparent))
} ORDER BY ?object
EOQ;
$parent_relationships = array('<fedora-rels-ext:isMemberOfCollection>', '<fedora-rels-ext:isMemberOf>', '<islandora:isPageOf>');
if (module_exists('islandora_compound_object')) {
$predicate = variable_get('islandora_compound_object_relationship', 'isConstituentOf');
$parent_relationships[] = "<fedora-rels-ext:$predicate>";
}
$parent_relationships = module_invoke_all('islandora_solution_pack_child_relationships');
$optionals = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_optionals', 'view');
$filter_modules = array(
@ -194,8 +190,9 @@ EOQ;
$sparql_query_objects = format_string($object_query, array(
'!optionals' => !empty($optionals) ? ('OPTIONAL {{' . implode('} UNION {', $optionals) . '}}') : '',
'!filters' => !empty($filters) ? implode(' ', array_map($filter_map, $filters)) : '',
'!dead_parent_relationships' => '?p = ' . implode(' || ?p = ', $parent_relationships),
'!live_parent_relationships' => '{' . implode(' } UNION { ', array_map($parent_map,$parent_relationships)) . '}',
'!dead_parent_relationships' => '?p = ' . implode(' || ?p = ', $parent_relationships['predicate']),
'!live_parent_relationships' => '{' . implode(' } UNION { ', array_map($parent_map, $parent_relationships['predicate'])) . '}',
'!prefix' => implode("\n", $parent_relationships['prefix']),
));
$results = $connection->repository->ri->sparqlQuery($sparql_query_objects);
return $results;

18
islandora.api.php

@ -966,3 +966,21 @@ function hook_islandora_datastream_filename_alter(&$filename, AbstractDatastream
);
}
}
/**
* Allow solution packs to register relationships used for children.
*
* @return array
* - prefix (array): This is is a valid snip-it of SPARQL to register prefixes used in the predicates array.
* - predicate (array): This array contains predicates used by the solution pack for child objects.
*/
function hook_islandora_solution_pack_child_relationships() {
return array(
'prefix' => array('PREFIX islandora: <http://islandora.ca/ontology/relsext#>'),
'predicate' => array(
'<fedora-rels-ext:isMemberOfCollection>',
'<fedora-rels-ext:isMemberOf>',
'<islandora:isPageOf>',
),
);
}

7
islandora.module

@ -2215,3 +2215,10 @@ function islandora_islandora_breadcrumbs_backends() {
),
);
}
/**
* Implements hook_islandora_solution_pack_child_relationships
*/
function islandora_islandora_solution_pack_child_relationships() {
return array('predicate' => array(), 'prefix' => array());
}
Loading…
Cancel
Save