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;
}
Beispiel #3
0
 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;
     }
 }
Beispiel #4
0
 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);
 }
Beispiel #7
0
 /**
  * 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'] = '';
         }
     }
 }