function setIdentifier($form_values) { require_once drupal_get_path('module', 'Fedora_Repository') . '/ObjectHelper.php'; require_once drupal_get_path('module', 'Fedora_Repository') . '/CollectionClass.php'; $collectionHelper = new CollectionClass(); $ppid = $_SESSION['pid']; $itqlquery = 'select $object from <#ri> where $object <fedora-rels-ext:isPartOf><info:fedora/' . $ppid . '> and $object <fedora-rels-ext:isMemberOfCollection><info:fedora/vre:mnpl-compounds>and $object <fedora-model:state> <info:fedora/fedora-system:def/model#Active>'; $relatedItems = $collectionHelper->getRelatedItems($this->pid, $itqlquery); $sxe = new SimpleXMLElement($relatedItems); $nmspace = $sxe->getNamespaces(true); $regspace = $sxe->registerXPathNamespace('ri', implode($nmspace)); $link = $sxe->xpath('//@uri'); $labid = $_SESSION['labid']; if (empty($link)) { $ident = $labid . '-C-0'; } else { //loop through returns , trim to create identifier and increment highest value $xia = array(); foreach ($link as $path) { $path1 = substr($path, '30'); $path2 = strrchr($path1, "-"); $path = str_replace($path2, '', $path1); $xi = ltrim($path2, "-"); $xnew = array_push($xia, $xi); } $num = max($xia); $numinc = $num + 1; $ident = $labid . '-C-' . $numinc; } return $ident; }
function get_RIQueryResults($pid, $query) { module_load_include('php', 'Fedora_Repository', 'CollectionClass'); $collectionClass = new CollectionClass(); $results = $collectionClass->getRelatedItems($pid, $query); return $results; }
function handleSpecimenEditForm($form_id, $form_values, $soap_client) { // ====================================== // = begin creation of foxml dom object for critter/specimen stream= // ====================================== module_load_include('php', 'Fedora_Repository', 'ObjectHelper'); $objectHelper = new ObjectHelper(); $critterStream = $objectHelper->getStream($form_values['pid'], 'CRITTER', true); $sxec = new SimpleXMLElement($critterStream); $dom = new DomDocument("1.0", "UTF-8"); $dom->formatOutput = true; ///begin writing critter datastream $spec = $dom->createElement("critters:sample"); $spec->setAttribute('xmlns:critters', "http://vre.upei.ca/critters/"); $spec->setAttribute('name', implode($sxec->xpath('//@name'))); // critter sample (root) elements $date = $dom->createElement("critters:date_collected", $form_values['date']); $size = $dom->createElement("critters:samplesize", implode($sxec->xpath('//critters:samplesize'))); $lab_id = $dom->createElement("critters:lab_id", implode($sxec->xpath('//critters:lab_id'))); $type = $dom->createElement("critters:type", $form_values['type']); $desc = $dom->createElement("critters:description", implode($sxec->xpath('//critters:description'))); $spec->appendChild($lab_id); $spec->appendChild($type); $spec->appendChild($date); $spec->appendChild($size); $spec->appendChild($desc); //critter taxonomy elements $taxon = $dom->createElement("critters:taxonomy"); $phylum = $dom->createElement("critters:phylum", $form_values['phylum']); $subphylum = $dom->createElement("critters:subPhylum", $form_values['subphylum']); $class = $dom->createElement("critters:class", $form_values['class']); $order = $dom->createElement("critters:order", $form_values['order']); $family = $dom->createElement("critters:family", $form_values['family']); $genus = $dom->createElement("critters:genus", $form_values['genus']); $species = $dom->createElement("critters:species", $form_values['species']); $taxon->appendChild($phylum); $taxon->appendChild($subphylum); $taxon->appendChild($class); $taxon->appendChild($order); $taxon->appendChild($family); $taxon->appendChild($genus); $taxon->appendChild($species); // critter photos $photos = $dom->createElement("critters:photos"); $photos->setAttribute('quantity', implode($sxec->xpath('//@quantity'))); foreach ($sxec->xpath('//@id') as $idkey => $photo) { $image = $dom->createElement("critters:photo"); $image->setAttribute('id', $photo); foreach ($sxec->xpath('//critters:location') as $key => $value) { if ($key == $idkey) { $location = $dom->createElement("critters:location", $value); $image->appendChild($location); } } $photos->appendChild($image); } // critter site elements $site = $dom->createElement("critters:site"); $sitename = $dom->createElement("critters:sitename", $form_values['sitename']); $country = $dom->createElement("critters:country", $form_values['country']); $region = $dom->createElement("critters:region", $form_values['region']); $latitude = $dom->createElement("critters:latitude", $form_values['latitude']); $longitude = $dom->createElement("critters:longitude", $form_values['longitude']); $depth = $dom->createElement("critters:depth", $form_values['depth']); $site->appendChild($sitename); $site->appendChild($country); $site->appendChild($region); $site->appendChild($latitude); $site->appendChild($longitude); $site->appendChild($depth); // critter collectors $collectors = $dom->createElement("critters:collectors"); foreach ($sxec->xpath('//critters:collector') as $individual) { $collector = $dom->createElement("critters:collector", $individual); $collectors->appendChild($collector); } // append nested elements $spec->appendChild($taxon); $spec->appendChild($photos); $spec->appendChild($site); $spec->appendChild($collectors); $dom->appendChild($spec); $newxml = $dom->saveXML(); // map critter form elements to DC stream // loop through taxonomy to create label pulled from dctitle if ($form_values['species'] != '' and $form_values['genus'] != '') { $label = " <i>" . $form_values['genus'] . " " . $form_values['species'] . "</i>"; } elseif ($form_values['species'] != '' and $form_values['genus'] == '') { $label = " <i>" . $form_values['species'] . "</i>"; } elseif ($form_values['species'] == '' and $form_values['genus'] != '') { $label = " <i>" . $form_values['genus'] . "</i>"; } elseif ($form_values['species'] == '' and $form_values['genus'] == '' and $form_values['family'] != '') { $label = " " . $form_values['family']; } elseif ($form_values['species'] == '' and $form_values['genus'] == '' and $form_values['family'] == '' and $form_values['order'] != '') { $label = " " . $form_values['order']; } elseif ($form_values['species'] == '' and $form_values['genus'] == '' and $form_values['family'] == '' and $form_values['order'] == '' and $form_values['class'] != '') { $label = " " . $form_values['class']; } elseif ($form_values['species'] == '' and $form_values['genus'] == '' and $form_values['family'] == '' and $form_values['order'] == '' and $form_values['class'] == '' and $form_values['subphylum'] != '') { $label = " " . $form_values['subphylum']; } elseif ($form_values['species'] == '' and $form_values['genus'] == '' and $form_values['family'] == '' and $form_values['order'] == '' and $form_values['class'] == '' and $form_values['subphylum'] == '' and $form_values['phylum'] != '') { $label = " " . $form_values['phylum']; } $dom2 = new DomDocument("1.0", "UTF-8"); $dom2->formatOutput = true; ///begin writing dc datastream $oai = $dom2->createElement("oai_dc:dc"); $oai->setAttribute('xmlns:oai_dc', "http://www.openarchives.org/OAI/2.0/oai_dc/"); $oai->setAttribute('xmlns:dc', "http://purl.org/dc/elements/1.1/"); $oai->setAttribute('xmlns:dcterms', "http://purl.org/dc/terms/"); $oai->setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance"); $dctitle = $dom2->createElement("dc:title", implode($sxec->xpath('//critters:lab_id')) . $label); $dccreator = $dom2->createElement("dc:creator", 'Marine Natural Products Lab, University of Prince Edward Island'); // list specimen taxonomy as dc:subject $dcphylum = $dom2->createElement("dc:subject", $form_values['phylum']); $dcsubphylum = $dom2->createElement("dc:subject", $form_values['subphylum']); $dcclass = $dom2->createElement("dc:subject", $form_values['class']); $dcorder = $dom2->createElement("dc:subject", $form_values['order']); $dcfamily = $dom2->createElement("dc:subject", $form_values['family']); $dcgenus = $dom2->createElement("dc:subject", $form_values['genus']); $dcspecies = $dom2->createElement("dc:subject", $form_values['species']); // end taxonomy $dcdesc = $dom2->createElement("dc:description", implode($sxec->xpath('//critters:description'))); $dcpublisher = $dom2->createElement("dc:publisher", 'Marine Natural Products Lab, University of Prince Edward Island'); $dcpid = $dom2->createElement("dc:identifier", $form_values['pid']); $dcident = $dom2->createElement("dc:identifier", implode($sxec->xpath('//critters:lab_id'))); $dcid = $dom2->createElement("dc:identifier", implode($sxec->xpath('//@name'))); $dcdate = $dom2->createElement("dc:date", implode($sxec->xpath('//critters:date_collected'))); $dctype = $dom2->createElement("dc:type", implode($sxec->xpath('//critters:type'))); $dcformat = $dom2->createElement("dc:format", 'text/html'); $dclang = $dom2->createElement("dc:language", 'eng'); $dcsource = $dom2->createElement("dc:source", ''); $dcrelation = $dom2->createElement("dc:relation", 'vre:mnpl-specimens'); $dcrights = $dom2->createElement("dc:rights", 'All Rights Reserved - Marine Natural Products Lab. For permission to use this material please contact MNPL at rkerr@upei.ca.'); // append elements $oai->appendChild($dctitle); $oai->appendChild($dccreator); $oai->appendChild($dcphylum); $oai->appendChild($dcsubphylum); $oai->appendChild($dcclass); $oai->appendChild($dcorder); $oai->appendChild($dcfamily); $oai->appendChild($dcgenus); $oai->appendChild($dcspecies); $oai->appendChild($dcdesc); $oai->appendChild($dcpublisher); //loop for contributors foreach ($sxec->xpath('//critters:collector') as $individual) { $dccontrib = $dom2->createElement("dc:contributor", $individual); $oai->appendChild($dccontrib); } $oai->appendChild($dcdate); $oai->appendChild($dctype); $oai->appendChild($dcformat); $oai->appendChild($dcpid); $oai->appendChild($dcident); $oai->appendChild($dcid); $oai->appendChild($dcsource); $oai->appendChild($dcrelation); $oai->appendChild($dcrights); $dom2->appendChild($oai); $dcxml = $dom2->saveXML(); $params = array("pid" => $form_values['pid'], "dsID" => 'DC', "altIDs" => "", "dsLabel" => "Dublin Core Record", "MIMEType" => "text/xml", "formatURI" => "URL", "dsContent" => $dcxml, "checksumType" => "DISABLED", "checksum" => "none", "logMessage" => "datastream_modified", "force" => "true"); $soapHelper = new ConnectionHelper(); $client = $soapHelper->getSoapClient(variable_get('fedora_soap_manage_url', 'http://*****:*****@uri') as $link) { $partpid = ltrim($link, 'info:fedora/'); $params = array("pid" => $partpid, "dsID" => $dsId, "altIDs" => "", "dsLabel" => "Parent Critter Record", "MIMEType" => "text/xml", "formatURI" => "URL", "dsContent" => $newxml, "checksumType" => "DISABLED", "checksum" => "none", "logMessage" => "datastream_modified", "force" => "true"); $soapHelper = new ConnectionHelper(); $client = $soapHelper->getSoapClient(variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl')); $object = $client->__soapCall('ModifyDatastreamByValue', array($params)); } // end of update other datastreams - begin soap call for main critter record $params = array("pid" => $pid, "dsID" => $dsId, "altIDs" => "", "dsLabel" => "CRITTER", "MIMEType" => "text/xml", "formatURI" => "URL", "dsContent" => $newxml, "checksumType" => "DISABLED", "checksum" => "none", "logMessage" => "datastream_modified", "force" => "true"); try { $soapHelper = new ConnectionHelper(); $client = $soapHelper->getSoapClient(variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl')); if ($client == null) { drupal_set_message(t('Error Getting Soap Client.'), 'error'); return; } $object = $client->__soapCall('ModifyDatastreamByValue', array($params)); return true; } catch (exception $e) { drupal_set_message(t('Error Editing Specimen! ') . $e->getMessage(), 'error'); watchdog(t("Fedora_Repository"), t("Error Editing Specimen!") . $e->getMessage(), WATCHDOG_ERROR); return; } }
function handleForm(&$form_values) { $errorMessage = NULL; module_load_include('php', 'Fedora_Repository', 'CollectionClass'); module_load_include('php', 'Fedora_Repository', 'ContentModel'); module_load_include('php', 'fedora_repository', 'api/fedora_item'); $content_model_pid = ContentModel::getPidFromIdentifier($form_values['models']); $content_model_dsid = ContentModel::getDSIDFromIdentifier($form_values['models']); $collectionHelper = new CollectionClass(); $startTime = time(); $collection_pid = $form_values['collection_pid']; $this->parse_refworks_item($form_values); $this->security_helper = new SecurityClass(); $collection_item = new Fedora_Item($collection_pid); $this->collection_policy_stream = $collection_item->get_datastream_dissemination('CHILD_SECURITY'); if (empty($this->collection_policy_stream)) { $this->collection_policy_stream = file_get_contents(drupal_get_path('module', 'fedora_repository') . '/policies/noObjectEditPolicy.xml'); } $success = 0; $errors = 0; foreach ($this->referencelist as $reference) { $dom = new DomDocument("1.0", "UTF-8"); $dom->substituteEntities = FALSE; $dom->formatOutput = true; $pid = $collectionHelper->getNextPid($collection_pid, $content_model_dsid); $rootElement = $dom->createElement("foxml:digitalObject"); $rootElement->setAttribute('VERSION', '1.1'); $rootElement->setAttribute('PID', "{$pid}"); $rootElement->setAttribute('xmlns:foxml', "info:fedora/fedora-system:def/foxml#"); $rootElement->setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance"); $rootElement->setAttribute('xsi:schemaLocation', "info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-1.xsd"); $dom->appendChild($rootElement); //create standard fedora stuff $qdc_element = $this->createQDCStream($dom, $rootElement, $reference); if (!$qdc_element) { drupal_set_message(t('Error Create DC for Refworks'), 'error'); continue; } $item_title = ''; foreach ($reference->t1 as $value) { $item_title .= ' --- ' . $value; } $this->createStandardFedoraStuff($form_values, $dom, $rootElement, $reference); $rootElement->appendChild($qdc_element); //create relationships $this->createRelationShips($form_values, $dom, $rootElement, $pid); //create dublin core $this->createFedoraDataStreams($form_values, $dom, $rootElement, $reference); if (!empty($this->collection_policy_stream)) { $this->create_security_policies($dom, $rootElement, $reference); } $params = array('objectXML' => $dom->saveXML(), 'format' => 'info:fedora/fedora-system:FOXML-1.1', 'logMessage' => "Fedora Object Ingested"); try { $soapHelper = new ConnectionHelper(); $client = $soapHelper->getSoapClient(variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl')); if ($client == null) { drupal_set_message(t('Error Getting Soap Client.'), 'error'); watchdog(t("FEDORA_REPOSITORY"), t("Error Getting SOAP client") . $e, null, WATCHDOG_ERROR); return; } $object = $client->__soapCall('ingest', array($params)); watchdog(t("FEDORA_REPOSITORY"), t("Successfully added repository item ") . $pid . ' - ' . $item_title, null, WATCHDOG_INFO); $deleteFiles = $form_values['delete_file']; //remove files from drupal file system if ($deleteFiles > 0) { unlink($form_values['fullpath']); } } catch (exception $e) { $errors++; $errorMessage = 'yes'; //drupal_set_message(t('Error Ingesting Object! Check Drupal watchdog logs for more info' . $e->getMessage()), 'error'); watchdog(t("FEDORA_REPOSITORY"), t("Error during ingest") . $item_title . ' ' . $e, null, WATCHDOG_ERROR); //return ' '; } $success++; } if (isset($errorMessage)) { drupal_set_message(t('Error Ingesting one or more records! Check Drupal watchdog logs for more info'), 'error'); } $endTime = time(); drupal_set_message(t('Successfull ingest of %success records. %errors records failed. Ingest took %seconds seconds', array('%success' => $success - $errors, '%errors' => $errors, '%seconds' => $endTime - $startTime)), 'info'); //drupal_set_message(t('ingest took %seconds ',array('%seconds'=>$endTime-$startTime)),'info'); }
function showCompound() { $dsid = 'COMPOUND'; $path = drupal_get_path('module', 'Fedora_Repository'); require_once drupal_get_path('module', 'Fedora_Repository') . '/ObjectHelper.php'; require_once drupal_get_path('module', 'Fedora_Repository') . '/CollectionClass.php'; $collectionHelper = new CollectionClass(); $xmlstr = $collectionHelper->getStream($this->pid, "COMPOUND"); html_entity_decode($xmlstr); if ($xmlstr == null || strlen($xmlstr) < 5) { return " "; } try { $proc = new XsltProcessor(); } catch (Exception $e) { drupal_set_message(t($e->getMessage()), 'error'); return " "; } $xsl = new DomDocument(); $xsl->load($path . '/mnpl/xsl/compound.xsl'); $input = new DomDocument(); $input->loadXML(trim($xmlstr)); $xsl = $proc->importStylesheet($xsl); $newdom = $proc->transformToDoc($input); $content = $newdom->saveXML(); // get parent pid and build link $pid = $this->pid; $itqlquery = 'select $object from <#ri> where <info:fedora/' . $pid . '><fedora-rels-ext:isPartOf> $object '; $relatedItems = $collectionHelper->getRelatedItems($this->pid, $itqlquery); $sxe = new SimpleXMLElement($relatedItems); $nmspace = $sxe->getNamespaces(true); $regspace = $sxe->registerXPathNamespace('ri', implode($nmspace)); // begin fractions $flabel = '<h4>Parent Specimen Record for This Compound</h4><p>'; $link = implode($sxe->xpath('//@uri')); $link = substr($link, 12); global $base_url; $plink .= '<a href =' . $base_url . '/fedora/repository/' . $link . '>Parent Specimen</a><br>'; if (user_access('edit fedora meta data')) { $editcomp = '<a href =' . $base_url . '/fedora/repository/editmetadata/' . $pid . '/' . $dsid . '>Edit This Compound</a><br>'; } else { $editcomp = ''; } // display other compounds for this parent $itqlQuery = 'select $object $title from <#ri> where $object <fedora-model:label> $title and $object <fedora-rels-ext:isPartOf> <info:fedora/' . $link . '> and $object <fedora-model:state> <info:fedora/fedora-system:def/model#Active> order by $title'; $relatedItems = $collectionHelper->getRelatedItems($this->pid, $itqlQuery); $sxe = new SimpleXMLElement($relatedItems); $nmspace = $sxe->getNamespaces(true); $regspace = $sxe->registerXPathNamespace('ri', implode($nmspace)); // begin display compounds global $base_url; $altcomp = '<h4> Other Compounds For Parent Sepcimen</h4><div>'; if (stristr(implode($sxe->xpath('//ri:title')), 'compound')) { foreach ($sxe->xpath('//@uri') as $link2) { if (strstr($link2, 'compound')) { $pidlink = substr($link2, 12); if ($pidlink != $pid) { $compound .= '<a href = "' . $base_url . '/fedora/repository/' . $pidlink . '">' . substr($link2, 30) . '</a><br>'; } } } } if ($compound == NULL) { $compound = "<div>No other Compounds present for this Specimen</div>"; } $collection_fieldset = array('#title' => t('MNPL Compound Record'), '#collapsible' => TRUE, '#collapsed' => FALSE, '#value' => $content . $editcomp . $flabel . $plink . $altcomp . $compound); return theme('fieldset', $collection_fieldset); }
function showRomeo($collapsed = false) { $path = drupal_get_path('module', 'Fedora_Repository'); module_load_include('php', 'Fedora_Repository', 'CollectionClass'); $collectionHelper = new CollectionClass(); //$returnValue['title']="Description"; $xmlstr = $collectionHelper->getStream($this->pid, "ROMEO", 0); if ($xmlstr == null || strlen($xmlstr) < 5) { return " "; } try { $proc = new XsltProcessor(); } catch (Exception $e) { drupal_set_message(t($e->getMessage()), 'error'); return; } $xsl = new DomDocument(); $xsl->load($path . '/xsl/romeo.xsl'); $input = new DomDocument(); $input->loadXML(trim($xmlstr)); $xsl = $proc->importStylesheet($xsl); $newdom = $proc->transformToDoc($input); $content = $newdom->saveXML(); $collection_fieldset = array('#title' => t('Romeo'), '#collapsible' => TRUE, '#collapsed' => $collapsed, '#value' => $content); return theme('fieldset', $collection_fieldset); }
/** * Look in the content model for rules to run on the specified datastream. * * @param string $pid * @param string $dsid * @return boolean */ function get_and_do_datastream_rules($pid, $dsid, $file = '') { if (!user_access('ingest new fedora objects')) { drupal_set_message(t('You do not have permission to add datastreams.')); return FALSE; } $collection_object = new CollectionClass(); $content_model_list = $this->get_content_models_list($pid); foreach ($content_model_list as $content_model) { $content_model_xml = $this->getStream($content_model, variable_get('Islandora_Content_Model_DSID', 'ISLANDORACM'), 1); if (!empty($content_model_xml->display_in_fieldset->datastream)) { foreach ($content_model_xml->display_in_fieldset->datastream as $datastream) { if ($datastream['id'] == $dsid) { $collection_object->callMethods($file, $datastream->add_datastream_method); break; } } } if (!empty($_SESSION['fedora_ingest_files'])) { foreach ($_SESSION['fedora_ingest_files'] as $dsid => $createdFile) { $file_obj = new stdClass(); // $file->uid = $user->uid; $file_obj->status = 0; $file_obj->filename = substr($createdFile, strrpos($createdFile, '/')); $file_obj->filepath = $createdFile; $file_obj->filemime = file_get_mimetype($createdFile); $this->addStream($pid, $dsid, $file_obj); file_delete($createdFile); } $_SESSION['fedora_ingest_files'] = ''; } } }