Browse Source

Merge branch '7.x' of git://github.com/Islandora/islandora into 7.x

pull/353/head
Nelson Hart 12 years ago
parent
commit
93b06432f1
  1. 28
      includes/content_model.autocomplete.inc
  2. 12
      includes/utilities.inc
  3. 44
      islandora.module

28
includes/content_model.autocomplete.inc

@ -28,37 +28,15 @@ function islandora_content_model_autocomplete($string) {
* Gets a map of form names suitable for use as select #options.
*/
function islandora_get_content_model_names() {
$results = islandora_query_content_models();
module_load_include('inc', 'islandora', 'includes/utilities');
$results = islandora_get_content_models();
$ret = array();
foreach ($results as $result) {
$ret[$result['model']['value']] = "{$result['label']['value']} ({$result['model']['value']})";
$ret[$result['pid']] = "{$result['label']} ({$result['pid']})";
}
return $ret;
}
/**
* Perform a resource index query to determine get a list of content models.
*
* Only returns content models with at least one subscribing object.
*
* @return array
* An array of RI results, as given by the Tuque RI query interface.
*/
function islandora_query_content_models() {
$connection = islandora_get_tuque_connection();
if ($connection) {
$query = 'select $model $label from <#ri> where
$model <fedora-model:hasModel> <info:fedora/fedora-system:ContentModel-3.0> and $model <fedora-model:label> $label
minus $model <mulgara:is><info:fedora/fedora-system:FedoraObject-3.0>
minus $model <mulgara:is><info:fedora/fedora-system:ContentModel-3.0>
minus $model <mulgara:is><info:fedora/fedora-system:ServiceDefinition-3.0>
minus $model <mulgara:is><info:fedora/fedora-system:ServiceDeployment-3.0>';
$results = $connection->repository->ri->itqlQuery($query);
return $results;
}
return array();
}
/**
* Minor array transformation.
*

12
includes/utilities.inc

@ -256,8 +256,8 @@ function islandora_get_namespace($id) {
*/
function islandora_namespace_accessible($id) {
if (variable_get('islandora_namespace_restriction_enforced', FALSE)) {
$namespace = islandora_get_namespace($id) . ':';
$allowed_namespaces = explode(" ", variable_get('islandora_pids_allowed', 'default: demo: changeme: islandora: ilives: islandora-book: books: newspapers: '));
$namespace = islandora_get_namespace($id);
$allowed_namespaces = islandora_get_allowed_namespaces();
return in_array($namespace, $allowed_namespaces);
}
return TRUE;
@ -712,7 +712,13 @@ function islandora_get_allowed_namespaces() {
$matches = array();
$allowed_namespaces = variable_get('islandora_pids_allowed', 'default: demo: changeme: islandora:');
preg_match_all('/([A-Za-z0-9-\.]+):/', $allowed_namespaces, $matches);
return $matches[1];
$accessible_namespaces = $matches[1];
// Ensure that the "islandora" namespace is explicitly allowed
// no matter what happens.
if (!in_array('islandora', $accessible_namespaces)) {
$accessible_namespaces[] = 'islandora';
}
return $accessible_namespaces;
}
/**

44
islandora.module

@ -963,6 +963,50 @@ function islandora_add_object(AbstractObject &$object) {
return $object->repository->ingestObject($object);
}
/**
* Creates a new object with the same properties as the old.
*
* @todo Make Tuque objects support cloneing.
*
* @param AbstractObject $object
* An existing or new Fedora Object.
*
* @return AbstractObject
* The new Fedora Object with properties identical to the object given. This
* returned object is not automatically ingested.
*/
function islandora_copy_object(AbstractObject $object) {
$clone = $object->repository->constructObject($object->id);
$object_properties = array(
'state',
'createdDate',
'lastModifiedDate',
'label',
'owner',
'logMessage',
);
// Copy Properties.
foreach ($object_properties as $property) {
if (isset($object->$property)) {
$clone->$property = $object->$property;
}
}
// Copy Datastreams.
foreach ($object as $dsid => $datastream) {
if (empty($clone[$dsid])) {
$clone->ingestDatastream($datastream);
}
else {
// Get the content into a file, and add the file.
$temp_file = drupal_tempnam('temporary://', 'datastream');
$datastream->getContent($temp_file);
$clone[$dsid]->setContentFromFile($temp_file);
drupal_unlink($temp_file);
}
}
return $clone;
}
/**
* Delete's or purges the given object.
*

Loading…
Cancel
Save