forked from Islandora/islandora
-
Notifications
You must be signed in to change notification settings - Fork 1
Build, Access, Modify and Delete Fedora objects with the Tuque interface
nigelgbanks edited this page Apr 18, 2013
·
2 revisions
$connection = new RepositoryConnection($fedoraUrl, $username, $password); $connection->reuseConnection = TRUE; $repository = new FedoraRepository( new FedoraApi($connection), new SimpleCache());
D7 module_load_include('inc', 'islandora', 'includes/IslandoraTuque'); D6 module_load_include('inc', 'fedora_repository', 'api/tuque'); $my_islandora_tuque = new IslandoraTuque(); $repository = $my_islandora_tuque->repository;
All interaction with Fedora can now take place through the $repository object. D7 There are some wrapper functions that handle some errors and fire some hooks in islandora.module.
Create array of ContentModels for the object. This will normally be a single element array:
$content_models = array(array('pid' => 'islandora:collectionCModel'));
Identify the namespace for the new pid, and identify the collection the object is to be a member of. Tuque will retrieve the next available PID in that namespace.¶ ↑
$namespace = 'test'; $collection_pid = 'islandora:root';
$fedora_object = $repository->constructObject($namespace); // allow fedora to generate a PID
or with a specified PID:
$fedora_object = $repository->constructObject($pid); // create an object with the given PID
$fedora_object->label = “my new object”;
$fedora_object->owner = $username;
$datastream_id = “TN”; $new_datastream = $fedora_object->constructDatastream($datastream_id);
or
$datastream_id = "MODS"; $controlGroup = "X"; $new_datastream = $fedora_object->constructDatastream($datastream_id, $controlGroup);
$new_datastream->label = 'MYDSID'; $new_datastream->mimetype = 'something/something'; $new_datastream->setContentFromUrl(URL_TO_CONTENT);
or
$new_datastream->setContentFromFile(PATH_TO_CONTENT);
or
$new_datastream->setContentFromString(“content”);
$new_datastream->url = 'some redirect URL';
$fedora_object->ingestDatastream($new_datastream);
$fedora_object->relationships->remove(FEDORA_MODEL_URI, 'hasModel', 'islandora:collectionCModel'); $fedora_object->relationships->add(FEDORA_MODEL_URI, 'hasModel', 'islandora:imageCModel');
$fedora_object['your dsid']->relationships->remove(ISLANDORA_SCHOLAR_EMBARGO_RELS_URI, 'embargo-until'); $fedora_object['your dsid']->relationships->add(ISLANDORA_SCHOLAR_EMBARGO_RELS_URI, 'embargo-until', 'some date', TRUE);
$new_fedora_object = islandora_add_object($fedora_object);
or ingest with existing repository object
$repository->ingestObject($fedora_object);
$pid = “test:1”; $fedora_object = islandora_object_load($pid);
or
$fedora_object = $repository->getObject($pid);
if (!$fedora_object) { drupal_set_message("Fedora Object isn't in the repo!"); }
$fedora_object->repository->purgeObject($pid);
or
$repository->purgeObject($pid);
$fedora_object->delete()
$pid = $fedoraObject->id;
$rels = $fedora_object->relationships->get()
[0] = Array ( [predicate] => Array ( [value] => hasModel [alias] => fedora-model [namespace] => info:fedora/fedora-system:def/model# ) [object] => Array ( [literal] => [value] => islandora:collectionCModel ) ) [1] => Array......
$rels = $fedora_object->relationships->get('info:fedora/fedora-system:def/model#', 'hasModel' );
$datastreams = $fedora_object->repository->api->a->listDatastreams($pid);
$datastream = $fedora_object['dsid'];
$dsid = $datastream->id;
label controlGroup versionable state mimetype format size checksum checksumType createdDate content url location logMessage
foreach($fedora_object as $datastream){ // access individual datastreams. }
$old_mime = $datastream->mimeType; $datastream->mimeType = “new/mimetype”; $datastream->content = file_get_contents('http://myexample.com/sample.jpg'));
// Create DS or grab it. if (!isset($fedora_object["JP2"])) { $jp2_ds = $fedora_object->constructDatastream('JP2', 'M'); } else { $jp2_ds = $fedora_object["JP2"]; } $jp2_ds->label = 'Derived display JP2.'; $jp2_ds->mimeType = 'image/jp2'; // Don't copy the file. $jp2_ds->setContentFromFile($jp2_file, FALSE); // May not need to be called if the DS already existed $fedora_object->ingestDatastream($jp2_ds);
$objects = $fedora_object->repository->ri->itqlQuery($query, 'unlimited'); // for itql $objects = $fedora_object->repository->ri->sparqlQuery($query); // for SparQL queries