コード例 #1
0
 public function occurrenceAdd($postArr)
 {
     $occid = 0;
     if ($this->collid) {
         if ($this->isEditor()) {
             $allowedFields = array('collid' => 'n', 'catalognumber' => 's', 'othercatalognumbers' => 's', 'sciname' => 's', 'tidinterpreted' => 's', 'family' => 's', 'scientificnameauthorship' => 's', 'localitysecurity' => 'n', 'country' => 's', 'stateprovince' => 's', 'county' => 's', 'processingstatus' => 's', 'recordedby' => 's', 'recordnumber' => 's', 'eventdate' => 'd', 'language' => 's');
             if (isset($postArr['stateprovince']) && $postArr['stateprovince'] && strlen($postArr['stateprovince']) == 2) {
                 $postArr['stateprovince'] = $this->translateStateAbbreviation($postArr['stateprovince']);
             }
             //If country is NULL and state populated, grab country from geo-lookup tables
             if ((!isset($postArr['country']) || !$postArr['country']) && isset($postArr['stateprovince']) && $postArr['stateprovince']) {
                 $postArr['country'] = $this->getCountry($postArr['stateprovince']);
             }
             //Add record
             $sql1 = '';
             $sql2 = '';
             foreach ($allowedFields as $f => $dataType) {
                 $sql1 .= ',' . $f;
                 if (array_key_exists($f, $postArr) && ($postArr[$f] || $postArr[$f] === 0)) {
                     $v = $postArr[$f];
                     if ($dataType == 'n' && is_numeric($v)) {
                         $sql2 .= ',' . $v;
                     } else {
                         $sql2 .= ',"' . $this->cleanInStr($v) . '"';
                     }
                 } else {
                     $sql2 .= ',NULL';
                 }
             }
             $sql = 'INSERT INTO omoccurrences(' . trim($sql1, ' ,') . ',recordenteredby,dateentered) ' . 'VALUES(' . trim($sql2, ' ,') . ',"' . $GLOBALS['USERNAME'] . '","' . date('Y-m-d H:i:s') . '")';
             //echo $sql;
             if ($this->conn->query($sql)) {
                 $occid = $this->conn->insert_id;
                 //Update collection stats
                 $this->conn->query('UPDATE omcollectionstats SET recordcnt = recordcnt + 1 WHERE collid = ' . $this->collid);
                 //Create and insert Symbiota GUID (UUID)
                 $guid = UuidFactory::getUuidV4();
                 if (!$this->conn->query('INSERT INTO guidoccurrences(guid,occid) VALUES("' . $guid . '",' . $occid . ')')) {
                     $this->errorStr = '(WARNING: Symbiota GUID mapping failed) ';
                 }
             } else {
                 $this->errorStr = 'ERROR adding occurrence record: ' . $this->conn->error;
             }
         }
     }
     return $occid;
 }
コード例 #2
0
 private function writeEmlFile_old()
 {
     global $clientRoot, $defaultTitle, $adminEmail;
     $this->logOrEcho("Creating eml.xml (" . date('h:i:s A') . ")... ");
     $urlPathPrefix = 'http://' . $_SERVER["SERVER_NAME"] . $clientRoot . (substr($clientRoot, -1) == '/' ? '' : '/');
     //Create new DOM document
     $newDoc = new DOMDocument('1.0', 'UTF-8');
     //Add root element
     $rootElem = $newDoc->createElement('eml:eml');
     $rootElem->setAttribute('xmlns:eml', 'eml://ecoinformatics.org/eml-2.1.1');
     $rootElem->setAttribute('xmlns:dc', 'http://purl.org/dc/terms/');
     $rootElem->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
     $rootElem->setAttribute('xsi:schemaLocation', 'eml://ecoinformatics.org/eml-2.1.1 http://rs.gbif.org/schema/eml-gbif-profile/1.0.1/eml.xsd');
     $rootElem->setAttribute('packageId', UuidFactory::getUuidV4());
     $rootElem->setAttribute('system', 'http://symbiota.org');
     $rootElem->setAttribute('scope', 'system');
     $rootElem->setAttribute('xml:lang', 'eng');
     $newDoc->appendChild($rootElem);
     $cArr = array();
     $datasetElem = $newDoc->createElement('dataset');
     $rootElem->appendChild($datasetElem);
     $datasetElem->appendChild($newDoc->createElement('alternateIdentifier', UuidFactory::getUuidV4()));
     $titleElem = $newDoc->createElement('title', $this->title);
     $titleElem->setAttribute('xml:lang', 'eng');
     $datasetElem->appendChild($titleElem);
     $creatorElem = $newDoc->createElement('creator');
     $creatorElem->appendChild($newDoc->createElement('organizationName', $defaultTitle));
     $creatorElem->appendChild($newDoc->createElement('electronicMailAddress', $adminEmail));
     $creatorElem->appendChild($newDoc->createElement('onlineUrl', $urlPathPrefix . 'index.php'));
     $datasetElem->appendChild($creatorElem);
     $mdElem = $newDoc->createElement('metadataProvider');
     $mdElem->appendChild($newDoc->createElement('organizationName', $defaultTitle));
     $mdElem->appendChild($newDoc->createElement('electronicMailAddress', $adminEmail));
     $mdElem->appendChild($newDoc->createElement('onlineUrl', $urlPathPrefix . 'index.php'));
     $datasetElem->appendChild($mdElem);
     $datasetElem->appendChild($newDoc->createElement('pubDate', date("Y-m-d")));
     $datasetElem->appendChild($newDoc->createElement('language', 'eng'));
     $abstractElem = $newDoc->createElement('abstract');
     $abstractElem->appendChild($newDoc->createElement('para', $this->description));
     $datasetElem->appendChild($abstractElem);
     $tempFileName = $this->targetPath . $this->ts . '-eml.xml';
     $newDoc->save($tempFileName);
     $this->zipArchive->addFile($tempFileName);
     $this->zipArchive->renameName($tempFileName, 'eml.xml');
     $this->logOrEcho("Done!! (" . date('h:i:s A') . ")\n");
 }
コード例 #3
0
 public function getEmlDom($emlArr = null)
 {
     if (!$emlArr) {
         $emlArr = $this->getEmlArr();
     }
     //Create new DOM document
     $newDoc = new DOMDocument('1.0', $this->charSetOut);
     //Add root element
     $rootElem = $newDoc->createElement('eml:eml');
     $rootElem->setAttribute('xmlns:eml', 'eml://ecoinformatics.org/eml-2.1.1');
     $rootElem->setAttribute('xmlns:dc', 'http://purl.org/dc/terms/');
     $rootElem->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
     $rootElem->setAttribute('xsi:schemaLocation', 'eml://ecoinformatics.org/eml-2.1.1 http://rs.gbif.org/schema/eml-gbif-profile/1.0.1/eml.xsd');
     $rootElem->setAttribute('packageId', UuidFactory::getUuidV4());
     $rootElem->setAttribute('system', 'http://symbiota.org');
     $rootElem->setAttribute('scope', 'system');
     $rootElem->setAttribute('xml:lang', 'eng');
     $newDoc->appendChild($rootElem);
     $cArr = array();
     $datasetElem = $newDoc->createElement('dataset');
     $rootElem->appendChild($datasetElem);
     if (array_key_exists('alternateIdentifier', $emlArr)) {
         foreach ($emlArr['alternateIdentifier'] as $v) {
             $altIdElem = $newDoc->createElement('alternateIdentifier');
             $altIdElem->appendChild($newDoc->createTextNode($v));
             $datasetElem->appendChild($altIdElem);
         }
     }
     if (array_key_exists('title', $emlArr)) {
         $titleElem = $newDoc->createElement('title');
         $titleElem->setAttribute('xml:lang', 'eng');
         $titleElem->appendChild($newDoc->createTextNode($emlArr['title']));
         $datasetElem->appendChild($titleElem);
     }
     if (array_key_exists('creator', $emlArr)) {
         $createArr = $emlArr['creator'];
         foreach ($createArr as $childArr) {
             $creatorElem = $newDoc->createElement('creator');
             if (isset($childArr['attr'])) {
                 $attrArr = $childArr['attr'];
                 unset($childArr['attr']);
                 foreach ($attrArr as $atKey => $atValue) {
                     $creatorElem->setAttribute($atKey, $atValue);
                 }
             }
             foreach ($childArr as $k => $v) {
                 $newChildElem = $newDoc->createElement($k);
                 $newChildElem->appendChild($newDoc->createTextNode($v));
                 $creatorElem->appendChild($newChildElem);
             }
             $datasetElem->appendChild($creatorElem);
         }
     }
     if (array_key_exists('metadataProvider', $emlArr)) {
         $mdArr = $emlArr['metadataProvider'];
         foreach ($mdArr as $childArr) {
             $mdElem = $newDoc->createElement('metadataProvider');
             foreach ($childArr as $k => $v) {
                 $newChildElem = $newDoc->createElement($k);
                 $newChildElem->appendChild($newDoc->createTextNode($v));
                 $mdElem->appendChild($newChildElem);
             }
             $datasetElem->appendChild($mdElem);
         }
     }
     if (array_key_exists('pubDate', $emlArr) && $emlArr['pubDate']) {
         $pubElem = $newDoc->createElement('pubDate');
         $pubElem->appendChild($newDoc->createTextNode($emlArr['pubDate']));
         $datasetElem->appendChild($pubElem);
     }
     $langStr = 'eng';
     if (array_key_exists('language', $emlArr) && $emlArr) {
         $langStr = $emlArr['language'];
     }
     $langElem = $newDoc->createElement('language');
     $langElem->appendChild($newDoc->createTextNode($langStr));
     $datasetElem->appendChild($langElem);
     if (array_key_exists('description', $emlArr) && $emlArr['description']) {
         $abstractElem = $newDoc->createElement('abstract');
         $paraElem = $newDoc->createElement('para');
         $paraElem->appendChild($newDoc->createTextNode($emlArr['description']));
         $abstractElem->appendChild($paraElem);
         $datasetElem->appendChild($abstractElem);
     }
     if (array_key_exists('contact', $emlArr)) {
         $contactArr = $emlArr['contact'];
         $contactElem = $newDoc->createElement('contact');
         $addrArr = array();
         if (isset($contactArr['addr'])) {
             $addrArr = $contactArr['addr'];
             unset($contactArr['addr']);
         }
         foreach ($contactArr as $contactKey => $contactValue) {
             $conElem = $newDoc->createElement($contactKey);
             $conElem->appendChild($newDoc->createTextNode($contactValue));
             $contactElem->appendChild($conElem);
         }
         if (isset($contactArr['addr'])) {
             $addressElem = $newDoc->createElement('address');
             foreach ($addrArr as $aKey => $aVal) {
                 $childAddrElem = $newDoc->createElement($aKey);
                 $childAddrElem->appendChild($newDoc->createTextNode($aVal));
                 $addressElem->appendChild($childAddrElem);
             }
             $contactElem->appendChild($addressElem);
         }
         $datasetElem->appendChild($contactElem);
     }
     if (array_key_exists('associatedParty', $emlArr)) {
         $associatedPartyArr = $emlArr['associatedParty'];
         foreach ($associatedPartyArr as $assocKey => $assocArr) {
             $assocElem = $newDoc->createElement('associatedParty');
             $addrArr = array();
             if (isset($assocArr['address'])) {
                 $addrArr = $assocArr['address'];
                 unset($assocArr['address']);
             }
             foreach ($assocArr as $aKey => $aArr) {
                 $childAssocElem = $newDoc->createElement($aKey);
                 $childAssocElem->appendChild($newDoc->createTextNode($aArr));
                 $assocElem->appendChild($childAssocElem);
             }
             if ($addrArr) {
                 $addrElem = $newDoc->createElement('address');
                 foreach ($addrArr as $addrKey => $addrValue) {
                     $childAddrElem = $newDoc->createElement($addrKey);
                     $childAddrElem->appendChild($newDoc->createTextNode($addrValue));
                     $addrElem->appendChild($childAddrElem);
                 }
                 $assocElem->appendChild($addrElem);
             }
             $datasetElem->appendChild($assocElem);
         }
     }
     if (array_key_exists('intellectualRights', $emlArr)) {
         $rightsElem = $newDoc->createElement('intellectualRights');
         $paraElem = $newDoc->createElement('para');
         $paraElem->appendChild($newDoc->createTextNode($emlArr['intellectualRights']));
         $rightsElem->appendChild($paraElem);
         $datasetElem->appendChild($rightsElem);
     }
     $symbElem = $newDoc->createElement('symbiota');
     $dateElem = $newDoc->createElement('dateStamp');
     $dateElem->appendChild($newDoc->createTextNode(date("c")));
     $symbElem->appendChild($dateElem);
     //Citation
     $id = UuidFactory::getUuidV4();
     $citeElem = $newDoc->createElement('citation');
     $citeElem->appendChild($newDoc->createTextNode($GLOBALS['defaultTitle'] . ' - ' . $id));
     $citeElem->setAttribute('identifier', $id);
     $symbElem->appendChild($citeElem);
     //Physical
     $physicalElem = $newDoc->createElement('physical');
     $physicalElem->appendChild($newDoc->createElement('characterEncoding', $this->charSetOut));
     //format
     $dfElem = $newDoc->createElement('dataFormat');
     $edfElem = $newDoc->createElement('externallyDefinedFormat');
     $dfElem->appendChild($edfElem);
     $edfElem->appendChild($newDoc->createElement('formatName', 'Darwin Core Archive'));
     $physicalElem->appendChild($dfElem);
     $symbElem->appendChild($physicalElem);
     //Collection data
     if (array_key_exists('collMetadata', $emlArr)) {
         foreach ($emlArr['collMetadata'] as $k => $collArr) {
             $collArr = $this->utf8EncodeArr($collArr);
             $collElem = $newDoc->createElement('collection');
             if (isset($collArr['attr']) && $collArr['attr']) {
                 $attrArr = $collArr['attr'];
                 unset($collArr['attr']);
                 foreach ($attrArr as $attrKey => $attrValue) {
                     $collElem->setAttribute($attrKey, $attrValue);
                 }
             }
             $abstractStr = '';
             if (isset($collArr['abstract']) && $collArr['abstract']) {
                 $abstractStr = $collArr['abstract'];
                 unset($collArr['abstract']);
             }
             foreach ($collArr as $collKey => $collValue) {
                 $collElem2 = $newDoc->createElement($collKey);
                 $collElem2->appendChild($newDoc->createTextNode($collValue));
                 $collElem->appendChild($collElem2);
             }
             if ($abstractStr) {
                 $abstractElem = $newDoc->createElement('abstract');
                 $abstractElem2 = $newDoc->createElement('para');
                 $abstractElem2->appendChild($newDoc->createTextNode($abstractStr));
                 $abstractElem->appendChild($abstractElem2);
                 $collElem->appendChild($abstractElem);
             }
             $symbElem->appendChild($collElem);
         }
     }
     $metaElem = $newDoc->createElement('metadata');
     $metaElem->appendChild($symbElem);
     $addMetaElem = $newDoc->createElement('additionalMetadata');
     $addMetaElem->appendChild($metaElem);
     $rootElem->appendChild($addMetaElem);
     return $newDoc;
 }
コード例 #4
0
 private function cleanHouse($collList)
 {
     $this->logOrEcho('Updating collection statistics...', 1);
     $occurMain = new OccurrenceMaintenance($this->conn);
     $this->logOrEcho('General cleaning...', 2);
     $collString = implode(',', $collList);
     if (!$occurMain->generalOccurrenceCleaning($collString)) {
         $errorArr = $occurMain->getErrorArr();
         foreach ($errorArr as $errorStr) {
             $this->logOrEcho($errorStr, 1);
         }
     }
     $this->logOrEcho('Protecting sensitive species...', 2);
     if (!$occurMain->protectRareSpecies()) {
         $errorArr = $occurMain->getErrorArr();
         foreach ($errorArr as $errorStr) {
             $this->logOrEcho($errorStr, 1);
         }
     }
     if ($collList) {
         $this->logOrEcho('Updating collection statistics...', 2);
         foreach ($collList as $collid) {
             if (!$occurMain->updateCollectionStats($collid)) {
                 $errorArr = $occurMain->getErrorArr();
                 foreach ($errorArr as $errorStr) {
                     $this->logOrEcho($errorStr, 1);
                 }
             }
         }
     }
     $this->logOrEcho('Populating global unique identifiers (GUIDs) for all records...', 2);
     $uuidManager = new UuidFactory($this->conn);
     $uuidManager->setSilent(1);
     $uuidManager->populateGuids();
 }
コード例 #5
0
 private function updateCollectionStats()
 {
     if ($this->dbMetadata) {
         //Do some more cleaning of the data after it haas been indexed in the omoccurrences table
         $occurUtil = new OccurrenceUtilities();
         $this->logOrEcho('Cleaning house...');
         if (!$occurUtil->generalOccurrenceCleaning()) {
             $errorArr = $occurUtil->getErrorArr();
             foreach ($errorArr as $errorStr) {
                 $this->logOrEcho($errorStr, 1);
             }
         }
         $this->logOrEcho('Protecting sensitive species...');
         if (!$occurUtil->protectRareSpecies()) {
             $errorArr = $occurUtil->getErrorArr();
             foreach ($errorArr as $errorStr) {
                 $this->logOrEcho($errorStr, 1);
             }
         }
         $this->logOrEcho('Updating statistics...');
         foreach ($this->collProcessedArr as $collid) {
             if (!$occurUtil->updateCollectionStats($collid)) {
                 $errorArr = $occurUtil->getErrorArr();
                 foreach ($errorArr as $errorStr) {
                     $this->logOrEcho($errorStr, 1);
                 }
             }
         }
         $this->logOrEcho('Populating global unique identifiers (GUIDs) for all records...');
         $uuidManager = new UuidFactory();
         $uuidManager->setSilent(1);
         $uuidManager->populateGuids();
     }
     $this->logOrEcho("Stats update completed");
 }
コード例 #6
0
ファイル: UuidFactory.php プロジェクト: Symbiota/Symbiota
 public function populateGuids($collId = 0)
 {
     set_time_limit(1000);
     $this->echoStr("Starting batch GUID processing (" . date('Y-m-d h:i:s A') . ")\n");
     //Populate Collection GUIDs
     $this->echoStr("Populating collection GUIDs (all collections by default)");
     $sql = 'SELECT collid FROM omcollections WHERE collectionguid IS NULL ';
     $rs = $this->conn->query($sql);
     $recCnt = 0;
     if ($rs->num_rows) {
         while ($r = $rs->fetch_object()) {
             $guid = UuidFactory::getUuidV4();
             $insSql = 'UPDATE omcollections SET collectionguid = "' . $guid . '" ' . 'WHERE collectionguid IS NULL AND collid = ' . $r->collid;
             if (!$this->conn->query($insSql)) {
                 $this->echoStr('ERROR: ' . $this->conn->error);
             }
             $recCnt++;
         }
         $rs->free();
     }
     $this->echoStr("Finished: {$recCnt} collection records processed\n");
     //Populate occurrence GUIDs
     $this->echoStr("Populating occurrence GUIDs\n");
     $sql = 'SELECT o.occid ' . 'FROM omoccurrences o LEFT JOIN guidoccurrences g ON o.occid = g.occid ' . 'WHERE g.occid IS NULL ';
     //$sql = 'SELECT o.occid '.
     //	'FROM omoccurrences o '.
     //	'WHERE o.occid NOT IN(SELECT occid FROM guidoccurrences WHERE occid IS NOT NULL) ';
     if ($collId) {
         $sql .= 'AND o.collid = ' . $collId;
     }
     $rs = $this->conn->query($sql);
     $recCnt = 0;
     if ($rs->num_rows) {
         while ($r = $rs->fetch_object()) {
             $guid = UuidFactory::getUuidV4();
             $insSql = 'INSERT INTO guidoccurrences(guid,occid) ' . 'VALUES("' . $guid . '",' . $r->occid . ')';
             if (!$this->conn->query($insSql)) {
                 $this->echoStr('ERROR: occur guids' . $this->conn->error);
             }
             $recCnt++;
             if ($recCnt % 1000 === 0) {
                 $this->echoStr($recCnt . ' records processed');
             }
         }
         $rs->free();
     }
     $this->echoStr("Finished: {$recCnt} occurrence records processed\n");
     //Populate determination GUIDs
     $this->echoStr("Populating determination GUIDs\n");
     $sql = 'SELECT d.detid FROM omoccurdeterminations d LEFT JOIN guidoccurdeterminations g ON d.detid = g.detid ';
     if ($collId) {
         $sql .= 'INNER JOIN omoccurrences o ON d.occid = o.occid ';
     }
     $sql .= 'WHERE g.detid IS NULL ';
     if ($collId) {
         $sql .= 'AND o.collid = ' . $collId;
     }
     //$sql = 'SELECT d.detid FROM omoccurdeterminations d ';
     //if($collId) $sql .= 'INNER JOIN omoccurrences o ON d.occid = o.occid ';
     //$sql .= 'WHERE d.detid NOT IN(SELECT detid FROM guidoccurdeterminations WHERE detid IS NOT NULL) ';
     //if($collId) $sql .= 'AND o.collid = '.$collId;
     $rs = $this->conn->query($sql);
     $recCnt = 0;
     if ($rs->num_rows) {
         while ($r = $rs->fetch_object()) {
             $guid = UuidFactory::getUuidV4();
             $insSql = 'INSERT INTO guidoccurdeterminations(guid,detid) ' . 'VALUES("' . $guid . '",' . $r->detid . ')';
             if (!$this->conn->query($insSql)) {
                 $this->echoStr('ERROR: det guids ' . $this->conn->error);
             }
             $recCnt++;
             if ($recCnt % 1000 === 0) {
                 $this->echoStr($recCnt . ' records processed');
             }
         }
         $rs->free();
     }
     $this->echoStr("Finished: {$recCnt} determination records processed\n");
     //Populate image GUIDs
     $this->echoStr("Populating image GUIDs\n");
     $sql = 'SELECT i.imgid FROM images i LEFT JOIN guidimages g ON i.imgid = g.imgid ';
     if ($collId) {
         $sql .= 'INNER JOIN omoccurrences o ON i.occid = o.occid ';
     }
     $sql .= 'WHERE g.imgid IS NULL ';
     if ($collId) {
         $sql .= 'AND o.collid = ' . $collId;
     }
     //$sql = 'SELECT i.imgid FROM images i ';
     //if($collId) $sql .= 'INNER JOIN omoccurrences o ON i.occid = o.occid ';
     //$sql .= 'WHERE i.imgid NOT IN(SELECT imgid FROM guidimages WHERE imgid IS NOT NULL) ';
     //if($collId) $sql .= 'AND o.collid = '.$collId;
     //echo $sql;
     $rs = $this->conn->query($sql);
     $recCnt = 0;
     if ($rs->num_rows) {
         while ($r = $rs->fetch_object()) {
             $guid = UuidFactory::getUuidV4();
             $insSql = 'INSERT INTO guidimages(guid,imgid) ' . 'VALUES("' . $guid . '",' . $r->imgid . ')';
             if (!$this->conn->query($insSql)) {
                 $this->echoStr('ERROR: image guids; ' . $this->conn->error);
             }
             $recCnt++;
             if ($recCnt % 1000 === 0) {
                 $this->echoStr($recCnt . ' records processed');
             }
         }
         $rs->free();
     }
     $this->echoStr("Finished: {$recCnt} image records processed\n");
     $this->echoStr("GUID batch processing complete (" . date('Y-m-d h:i:s A') . ")\n");
 }
コード例 #7
0
ファイル: ImageShared.php プロジェクト: jphilip124/Symbiota
 public function databaseImage($imgWebUrl, $imgTnUrl, $imgLgUrl, $tid)
 {
     global $paramsArr;
     $status = true;
     if ($imgWebUrl) {
         $urlBase = $this->getUrlBase();
         if (strtolower(substr($imgWebUrl, 0, 7)) != 'http://' && strtolower(substr($imgWebUrl, 0, 8)) != 'https://') {
             $imgWebUrl = $urlBase . $imgWebUrl;
         }
         if ($imgTnUrl && strtolower(substr($imgTnUrl, 0, 7)) != 'http://' && strtolower(substr($imgTnUrl, 0, 8)) != 'https://') {
             $imgTnUrl = $urlBase . $imgTnUrl;
         }
         if ($imgLgUrl && strtolower(substr($imgLgUrl, 0, 7)) != 'http://' && strtolower(substr($imgLgUrl, 0, 8)) != 'https://') {
             $imgLgUrl = $urlBase . $imgLgUrl;
         }
         //If is an occurrence image, get tid from occurrence
         if (!$tid && $this->occid) {
             $sql1 = 'SELECT tidinterpreted FROM omoccurrences WHERE tidinterpreted IS NOT NULL AND occid = ' . $this->occid;
             $rs1 = $this->conn->query($sql1);
             if ($r1 = $rs1->fetch_object()) {
                 $tid = $r1->tidinterpreted;
             }
             $rs1->free();
         }
         //Save currently loaded record
         $sql = 'INSERT INTO images (tid, url, thumbnailurl, originalurl, photographer, photographeruid, caption, ' . 'owner, sourceurl, copyright, locality, occid, notes, username, sortsequence, sourceIdentifier, ' . ' rights, accessrights) ' . 'VALUES (' . ($tid ? $tid : 'NULL') . ',"' . $imgWebUrl . '",' . ($imgTnUrl ? '"' . $imgTnUrl . '"' : 'NULL') . ',' . ($imgLgUrl ? '"' . $imgLgUrl . '"' : 'NULL') . ',' . ($this->photographer ? '"' . $this->photographer . '"' : 'NULL') . ',' . ($this->photographerUid ? $this->photographerUid : 'NULL') . ',' . ($this->caption ? '"' . $this->caption . '"' : 'NULL') . ',' . ($this->owner ? '"' . $this->owner . '"' : 'NULL') . ',' . ($this->sourceUrl ? '"' . $this->sourceUrl . '"' : 'NULL') . ',' . ($this->copyright ? '"' . $this->copyright . '"' : 'NULL') . ',' . ($this->locality ? '"' . $this->locality . '"' : 'NULL') . ',' . ($this->occid ? $this->occid : 'NULL') . ',' . ($this->notes ? '"' . $this->notes . '"' : 'NULL') . ',"' . $this->cleanInStr($paramsArr['un']) . '",' . ($this->sortSeq ? $this->sortSeq : '50') . ',' . ($this->sourceIdentifier ? '"' . $this->sourceIdentifier . '"' : 'NULL') . ',' . ($this->rights ? '"' . $this->rights . '"' : 'NULL') . ',' . ($this->accessrights ? '"' . $this->accessrights . '"' : 'NULL') . ')';
         //echo $sql; exit;
         if ($this->conn->query($sql)) {
             //Create and insert Symbiota GUID for image(UUID)
             $guid = UuidFactory::getUuidV4();
             $this->activeImgId = $this->conn->insert_id;
             if (!$this->conn->query('INSERT INTO guidimages(guid,imgid) VALUES("' . $guid . '",' . $this->activeImgId . ')')) {
                 $this->errArr[] = ' (Warning: Symbiota GUID mapping failed)';
             }
         } else {
             $this->errArr[] = 'ERROR loading data: ' . $this->conn->error;
             $status = false;
         }
     }
     return $status;
 }
コード例 #8
0
<?php

include_once '../config/symbini.php';
include_once $serverRoot . '/classes/UuidFactory.php';
header("Content-Type: text/html; charset=" . $charset);
$collId = array_key_exists("collid", $_REQUEST) ? $_REQUEST["collid"] : 0;
$action = array_key_exists("formsubmit", $_POST) ? $_POST["formsubmit"] : '';
$isEditor = 0;
if ($isAdmin || array_key_exists("CollAdmin", $userRights) && in_array($collId, $userRights["CollAdmin"])) {
    $isEditor = 1;
}
$uuidManager = new UuidFactory();
?>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=<?php 
echo $charset;
?>
">
	<title>UUID GUID Mapper</title>
	<link rel="stylesheet" href="../css/base.css?<?php 
echo $CSS_VERSION;
?>
" type="text/css" />
    <link rel="stylesheet" href="../css/main.css?<?php 
echo $CSS_VERSION;
?>
" type="text/css" />
	<script type="text/javascript">
		function toggle(target){
			var objDiv = document.getElementById(target);
コード例 #9
0
ファイル: agent.php プロジェクト: Symbiota/Symbiota
include_once $serverRoot . '/classes/AgentManager.php';
include_once $serverRoot . '/classes/RdfUtility.php';
include_once $serverRoot . '/classes/UuidFactory.php';
// Find out what media types the client would like, in order.
$accept = RdfUtility::parseHTTPAcceptHeader($_SERVER['HTTP_ACCEPT']);
$force = array_key_exists("force", $_REQUEST) ? $_REQUEST["force"] : "";
$agentid = preg_replace('[^0-9]', '', array_key_exists("agentid", $_REQUEST) ? $_REQUEST["agentid"] : "");
$uuid = array_key_exists("uuid", $_REQUEST) ? $_REQUEST["uuid"] : "";
$findobjects = preg_replace('[^0-9]', '', array_key_exists("findobjects", $_REQUEST) ? $_REQUEST["findobjects"] : "");
$agent = new Agent();
$agentview = new AgentView();
if (strlen($agentid) > 0) {
    $agent->load($agentid);
    $agentview->setModel($agent);
} elseif (strlen($uuid) > 0) {
    if (UuidFactory::is_valid($uuid)) {
        $agent->loadByGUID($uuid);
        $agentview->setModel($agent);
    }
}
$done = FALSE;
if ($force == 'turtle') {
    deliverTurtle();
    $done = TRUE;
}
if ($force == 'rdfxml') {
    deliverRdfXml();
    $done = TRUE;
}
reset($accept);
while (!$done && (list($key, $mediarange) = each($accept))) {
コード例 #10
0
 public function makeDeterminationCurrent($detId)
 {
     $status = 'Determination is now current!';
     //Make sure determination data within omoccurrences is in omoccurdeterminations. If already there, INSERT will fail and nothing lost
     $sqlInsert = 'INSERT INTO omoccurdeterminations(occid, identifiedBy, dateIdentified, sciname, scientificNameAuthorship, ' . 'identificationQualifier, identificationReferences, identificationRemarks, sortsequence) ' . 'SELECT occid, IFNULL(identifiedby,"unknown") AS idby, ' . 'IFNULL(dateidentified,"unknown") AS iddate, sciname, scientificnameauthorship, ' . 'identificationqualifier, identificationreferences, identificationremarks, 10 AS sortseq ' . 'FROM omoccurrences WHERE (occid = ' . $this->occid . ')';
     if ($this->conn->query($sqlInsert)) {
         //Create and insert Symbiota GUID for determination(UUID)
         $guid = UuidFactory::getUuidV4();
         if (!$this->conn->query('INSERT INTO guidoccurdeterminations(guid,detid) VALUES("' . $guid . '",' . $this->conn->insert_id . ')')) {
             $status .= ' (Warning: Symbiota GUID mapping #1 failed)';
         }
     }
     //echo "<div>".$sqlInsert."</div>";
     //Update omoccurrences to reflect this determination
     $tid = 0;
     $sStatus = 0;
     $family = '';
     $sqlTid = 'SELECT t.tid, t.securitystatus, ts.family ' . 'FROM omoccurdeterminations d INNER JOIN taxa t ON d.sciname = t.sciname ' . 'INNER JOIN taxstatus ts ON t.tid = ts.tid ' . 'WHERE (d.detid = ' . $detId . ') AND (taxauthid = 1)';
     $rs = $this->conn->query($sqlTid);
     if ($r = $rs->fetch_object()) {
         $tid = $r->tid;
         $family = $r->family;
         if ($r->securitystatus == 1) {
             $sStatus = 1;
         }
     }
     $rs->free();
     if (!$sStatus && $tid) {
         $sql2 = 'SELECT c.clid ' . 'FROM fmchecklists c INNER JOIN fmchklsttaxalink cl ON c.clid = cl.clid ' . 'INNER JOIN taxstatus ts1 ON cl.tid = ts1.tid ' . 'INNER JOIN taxstatus ts2 ON ts1.tidaccepted = ts2.tidaccepted ' . 'INNER JOIN omoccurrences o ON c.locality = o.stateprovince ' . 'WHERE c.type = "rarespp" AND ts1.taxauthid = 1 AND ts2.taxauthid = 1 ' . 'AND (ts2.tid = ' . $tid . ') AND (o.occid = ' . $this->occid . ')';
         //echo $sql; exit;
         $rsSs2 = $this->conn->query($sql2);
         if ($rsSs2->num_rows) {
             $sStatus = 1;
         }
         $rsSs2->free();
     }
     $sqlNewDet = 'UPDATE omoccurrences o INNER JOIN omoccurdeterminations d ON o.occid = d.occid ' . 'SET o.identifiedBy = d.identifiedBy, o.dateIdentified = d.dateIdentified,o.family = ' . ($family ? '"' . $family . '"' : 'NULL') . ',' . 'o.sciname = d.sciname,o.genus = NULL,o.specificEpithet = NULL,o.taxonRank = NULL,o.infraspecificepithet = NULL,o.scientificname = NULL,' . 'o.scientificNameAuthorship = d.scientificnameauthorship,o.identificationQualifier = d.identificationqualifier,' . 'o.identificationReferences = d.identificationreferences,o.identificationRemarks = d.identificationremarks,' . 'o.tidinterpreted = ' . ($tid ? $tid : 'NULL') . ', o.localitysecurity = ' . $sStatus . ' WHERE (detid = ' . $detId . ')';
     //echo "<div>".$sqlNewDet."</div>";
     $this->conn->query($sqlNewDet);
     //Set all dets for this specimen to not current
     $sqlSetCur1 = 'UPDATE omoccurdeterminations SET iscurrent = 0 WHERE occid = ' . $this->occid;
     if (!$this->conn->query($sqlSetCur1)) {
         $status = 'ERROR resetting dets to not current: ' . $this->conn->error;
         //$status .= '; '.$sqlSetCur1;
     }
     //Set targetted det to current
     $sqlSetCur2 = 'UPDATE omoccurdeterminations SET iscurrent = 1 WHERE detid = ' . $detId;
     if (!$this->conn->query($sqlSetCur2)) {
         $status = 'ERROR setting target det to current: ' . $this->conn->error;
         //$status .= '; '.$sqlSetCur2;
     }
     if ($tid) {
         $sql = 'UPDATE images SET tid = ' . $tid . ' WHERE (occid = ' . $this->occid . ')';
         //echo $sql;
         $this->conn->query($sql);
     } else {
         $status = 'ERROR: Annotation made current but failed to remap image because taxon name not linked to taxonomic thesaurus.';
     }
 }
コード例 #11
0
 public function submitCollAdd($postArr)
 {
     global $symbUid;
     $instCode = $this->cleanInStr($postArr['institutioncode']);
     $collCode = $this->cleanInStr($postArr['collectioncode']);
     $coleName = $this->cleanInStr($postArr['collectionname']);
     $fullDesc = $this->cleanInStr($postArr['fulldescription']);
     $homepage = $this->cleanInStr($postArr['homepage']);
     $contact = $this->cleanInStr($postArr['contact']);
     $email = $this->cleanInStr($postArr['email']);
     $rights = $this->cleanInStr($postArr['rights']);
     $rightsHolder = $this->cleanInStr($postArr['rightsholder']);
     $accessRights = $this->cleanInStr($postArr['accessrights']);
     $publicEdits = array_key_exists('publicedits', $postArr) ? $postArr['publicedits'] : 0;
     $guidTarget = array_key_exists('guidtarget', $postArr) ? $postArr['guidtarget'] : '';
     if ($_FILES['iconfile']['name']) {
         $icon = $this->addIconImageFile();
     } else {
         $icon = array_key_exists('iconurl', $postArr) ? $this->cleanInStr($postArr['iconurl']) : '';
     }
     $managementType = array_key_exists('managementtype', $postArr) ? $this->cleanInStr($postArr['managementtype']) : '';
     $collType = array_key_exists('colltype', $postArr) ? $this->cleanInStr($postArr['colltype']) : '';
     $guid = array_key_exists('collectionguid', $postArr) ? $this->cleanInStr($postArr['collectionguid']) : '';
     if (!$guid) {
         $guid = UuidFactory::getUuidV4();
     }
     $indUrl = array_key_exists('individualurl', $postArr) ? $this->cleanInStr($postArr['individualurl']) : '';
     $sortSeq = array_key_exists('sortseq', $postArr) ? $postArr['sortseq'] : '';
     $conn = MySQLiConnectionFactory::getCon("write");
     $sql = 'INSERT INTO omcollections(institutioncode,collectioncode,collectionname,fulldescription,homepage,' . 'contact,email,latitudedecimal,longitudedecimal,publicedits,guidtarget,rights,rightsholder,accessrights,icon,' . 'managementtype,colltype,collectionguid,individualurl,sortseq) ' . 'VALUES ("' . $instCode . '",' . ($collCode ? '"' . $collCode . '"' : 'NULL') . ',"' . $coleName . '",' . ($fullDesc ? '"' . $fullDesc . '"' : 'NULL') . ',' . ($homepage ? '"' . $homepage . '"' : 'NULL') . ',' . ($contact ? '"' . $contact . '"' : 'NULL') . ',' . ($email ? '"' . $email . '"' : 'NULL') . ',' . ($postArr['latitudedecimal'] ? $postArr['latitudedecimal'] : 'NULL') . ',' . ($postArr['longitudedecimal'] ? $postArr['longitudedecimal'] : 'NULL') . ',' . $publicEdits . ',' . ($guidTarget ? '"' . $guidTarget . '"' : 'NULL') . ',' . ($rights ? '"' . $rights . '"' : 'NULL') . ',' . ($rightsHolder ? '"' . $rightsHolder . '"' : 'NULL') . ',' . ($accessRights ? '"' . $accessRights . '"' : 'NULL') . ',' . ($icon ? '"' . $icon . '"' : 'NULL') . ',' . ($managementType ? '"' . $managementType . '"' : 'Snapshot') . ',' . ($collType ? '"' . $collType . '"' : 'Preserved Specimens') . ',"' . $guid . '",' . ($indUrl ? '"' . $indUrl . '"' : 'NULL') . ',' . ($sortSeq ? $sortSeq : 'NULL') . ') ';
     //echo "<div>$sql</div>";
     $cid = 0;
     if ($conn->query($sql)) {
         $cid = $conn->insert_id;
         $sql = 'INSERT INTO omcollectionstats(collid,recordcnt,uploadedby) ' . 'VALUES(' . $cid . ',0,"' . $symbUid . '")';
         $conn->query($sql);
         //Add collection to category
         if (isset($postArr['ccpk']) && $postArr['ccpk']) {
             $sql = 'INSERT INTO omcollcatlink (ccpk,collid) VALUES(' . $postArr['ccpk'] . ',' . $cid . ')';
             if (!$conn->query($sql)) {
                 $status = 'ERROR inserting collection category link(2): ' . $conn->error . '; SQL: ' . $sql;
                 return $status;
             }
         }
         $this->collid = $cid;
     } else {
         $cid = 'ERROR inserting new collection: ' . $conn->error;
     }
     $conn->close();
     return $cid;
 }
コード例 #12
0
 public function getEmlDom($emlArr = null)
 {
     global $RIGHTS_TERMS_DEFS;
     $usageTermArr = array();
     if (!$emlArr) {
         $emlArr = $this->getEmlArr();
     }
     foreach ($RIGHTS_TERMS_DEFS as $k => $v) {
         if ($k == $emlArr['intellectualRights']) {
             $usageTermArr = $v;
         }
     }
     //Create new DOM document
     $newDoc = new DOMDocument('1.0', $this->charSetOut);
     //Add root element
     $rootElem = $newDoc->createElement('eml:eml');
     $rootElem->setAttribute('xmlns:eml', 'eml://ecoinformatics.org/eml-2.1.1');
     $rootElem->setAttribute('xmlns:dc', 'http://purl.org/dc/terms/');
     $rootElem->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
     $rootElem->setAttribute('xsi:schemaLocation', 'eml://ecoinformatics.org/eml-2.1.1 http://rs.gbif.org/schema/eml-gbif-profile/1.0.1/eml.xsd');
     $rootElem->setAttribute('packageId', UuidFactory::getUuidV4());
     $rootElem->setAttribute('system', 'http://symbiota.org');
     $rootElem->setAttribute('scope', 'system');
     $rootElem->setAttribute('xml:lang', 'eng');
     $newDoc->appendChild($rootElem);
     $cArr = array();
     $datasetElem = $newDoc->createElement('dataset');
     $rootElem->appendChild($datasetElem);
     if (array_key_exists('alternateIdentifier', $emlArr)) {
         foreach ($emlArr['alternateIdentifier'] as $v) {
             $altIdElem = $newDoc->createElement('alternateIdentifier');
             $altIdElem->appendChild($newDoc->createTextNode($v));
             $datasetElem->appendChild($altIdElem);
         }
     }
     if (array_key_exists('title', $emlArr)) {
         $titleElem = $newDoc->createElement('title');
         $titleElem->setAttribute('xml:lang', 'eng');
         $titleElem->appendChild($newDoc->createTextNode($emlArr['title']));
         $datasetElem->appendChild($titleElem);
     }
     if (array_key_exists('creator', $emlArr)) {
         $createArr = $emlArr['creator'];
         foreach ($createArr as $childArr) {
             $creatorElem = $newDoc->createElement('creator');
             if (isset($childArr['attr'])) {
                 $attrArr = $childArr['attr'];
                 unset($childArr['attr']);
                 foreach ($attrArr as $atKey => $atValue) {
                     $creatorElem->setAttribute($atKey, $atValue);
                 }
             }
             foreach ($childArr as $k => $v) {
                 $newChildElem = $newDoc->createElement($k);
                 $newChildElem->appendChild($newDoc->createTextNode($v));
                 $creatorElem->appendChild($newChildElem);
             }
             $datasetElem->appendChild($creatorElem);
         }
     }
     if (array_key_exists('metadataProvider', $emlArr)) {
         $mdArr = $emlArr['metadataProvider'];
         foreach ($mdArr as $childArr) {
             $mdElem = $newDoc->createElement('metadataProvider');
             foreach ($childArr as $k => $v) {
                 $newChildElem = $newDoc->createElement($k);
                 $newChildElem->appendChild($newDoc->createTextNode($v));
                 $mdElem->appendChild($newChildElem);
             }
             $datasetElem->appendChild($mdElem);
         }
     }
     if (array_key_exists('pubDate', $emlArr) && $emlArr['pubDate']) {
         $pubElem = $newDoc->createElement('pubDate');
         $pubElem->appendChild($newDoc->createTextNode($emlArr['pubDate']));
         $datasetElem->appendChild($pubElem);
     }
     $langStr = 'eng';
     if (array_key_exists('language', $emlArr) && $emlArr) {
         $langStr = $emlArr['language'];
     }
     $langElem = $newDoc->createElement('language');
     $langElem->appendChild($newDoc->createTextNode($langStr));
     $datasetElem->appendChild($langElem);
     if (array_key_exists('description', $emlArr) && $emlArr['description']) {
         $abstractElem = $newDoc->createElement('abstract');
         $paraElem = $newDoc->createElement('para');
         $paraElem->appendChild($newDoc->createTextNode($emlArr['description']));
         $abstractElem->appendChild($paraElem);
         $datasetElem->appendChild($abstractElem);
     }
     if (array_key_exists('contact', $emlArr)) {
         $contactArr = $emlArr['contact'];
         $contactElem = $newDoc->createElement('contact');
         $addrArr = array();
         if (isset($contactArr['addr'])) {
             $addrArr = $contactArr['addr'];
             unset($contactArr['addr']);
         }
         foreach ($contactArr as $contactKey => $contactValue) {
             $conElem = $newDoc->createElement($contactKey);
             $conElem->appendChild($newDoc->createTextNode($contactValue));
             $contactElem->appendChild($conElem);
         }
         if (isset($contactArr['addr'])) {
             $addressElem = $newDoc->createElement('address');
             foreach ($addrArr as $aKey => $aVal) {
                 $childAddrElem = $newDoc->createElement($aKey);
                 $childAddrElem->appendChild($newDoc->createTextNode($aVal));
                 $addressElem->appendChild($childAddrElem);
             }
             $contactElem->appendChild($addressElem);
         }
         $datasetElem->appendChild($contactElem);
     }
     if (array_key_exists('associatedParty', $emlArr)) {
         $associatedPartyArr = $emlArr['associatedParty'];
         foreach ($associatedPartyArr as $assocKey => $assocArr) {
             $assocElem = $newDoc->createElement('associatedParty');
             $addrArr = array();
             if (isset($assocArr['address'])) {
                 $addrArr = $assocArr['address'];
                 unset($assocArr['address']);
             }
             foreach ($assocArr as $aKey => $aArr) {
                 $childAssocElem = $newDoc->createElement($aKey);
                 $childAssocElem->appendChild($newDoc->createTextNode($aArr));
                 $assocElem->appendChild($childAssocElem);
             }
             if ($addrArr) {
                 $addrElem = $newDoc->createElement('address');
                 foreach ($addrArr as $addrKey => $addrValue) {
                     $childAddrElem = $newDoc->createElement($addrKey);
                     $childAddrElem->appendChild($newDoc->createTextNode($addrValue));
                     $addrElem->appendChild($childAddrElem);
                 }
                 $assocElem->appendChild($addrElem);
             }
             $datasetElem->appendChild($assocElem);
         }
     }
     if (array_key_exists('intellectualRights', $emlArr)) {
         $rightsElem = $newDoc->createElement('intellectualRights');
         $paraElem = $newDoc->createElement('para');
         $paraElem->appendChild($newDoc->createTextNode('To the extent possible under law, the publisher has waived all rights to these data and has dedicated them to the'));
         $ulinkElem = $newDoc->createElement('ulink');
         $citetitleElem = $newDoc->createElement('citetitle');
         $citetitleElem->appendChild($newDoc->createTextNode(array_key_exists('title', $usageTermArr) ? $usageTermArr['title'] : ''));
         $ulinkElem->appendChild($citetitleElem);
         $ulinkElem->setAttribute('url', array_key_exists('url', $usageTermArr) ? $usageTermArr['url'] : $emlArr['intellectualRights']);
         $paraElem->appendChild($ulinkElem);
         $paraElem->appendChild($newDoc->createTextNode(array_key_exists('def', $usageTermArr) ? $usageTermArr['def'] : ''));
         $rightsElem->appendChild($paraElem);
         $datasetElem->appendChild($rightsElem);
     }
     $symbElem = $newDoc->createElement('symbiota');
     $dateElem = $newDoc->createElement('dateStamp');
     $dateElem->appendChild($newDoc->createTextNode(date("c")));
     $symbElem->appendChild($dateElem);
     //Citation
     $id = UuidFactory::getUuidV4();
     $citeElem = $newDoc->createElement('citation');
     $citeElem->appendChild($newDoc->createTextNode($GLOBALS['defaultTitle'] . ' - ' . $id));
     $citeElem->setAttribute('identifier', $id);
     $symbElem->appendChild($citeElem);
     //Physical
     $physicalElem = $newDoc->createElement('physical');
     $physicalElem->appendChild($newDoc->createElement('characterEncoding', $this->charSetOut));
     //format
     $dfElem = $newDoc->createElement('dataFormat');
     $edfElem = $newDoc->createElement('externallyDefinedFormat');
     $dfElem->appendChild($edfElem);
     $edfElem->appendChild($newDoc->createElement('formatName', 'Darwin Core Archive'));
     $physicalElem->appendChild($dfElem);
     $symbElem->appendChild($physicalElem);
     //Collection data
     if (array_key_exists('collMetadata', $emlArr)) {
         foreach ($emlArr['collMetadata'] as $k => $collArr) {
             $collArr = $this->utf8EncodeArr($collArr);
             $collElem = $newDoc->createElement('collection');
             if (isset($collArr['attr']) && $collArr['attr']) {
                 $attrArr = $collArr['attr'];
                 unset($collArr['attr']);
                 foreach ($attrArr as $attrKey => $attrValue) {
                     $collElem->setAttribute($attrKey, $attrValue);
                 }
             }
             $abstractStr = '';
             if (isset($collArr['abstract']) && $collArr['abstract']) {
                 $abstractStr = $collArr['abstract'];
                 unset($collArr['abstract']);
             }
             foreach ($collArr as $collKey => $collValue) {
                 $collElem2 = $newDoc->createElement($collKey);
                 $collElem2->appendChild($newDoc->createTextNode($collValue));
                 $collElem->appendChild($collElem2);
             }
             if ($abstractStr) {
                 $abstractElem = $newDoc->createElement('abstract');
                 $abstractElem2 = $newDoc->createElement('para');
                 $abstractElem2->appendChild($newDoc->createTextNode($abstractStr));
                 $abstractElem->appendChild($abstractElem2);
                 $collElem->appendChild($abstractElem);
             }
             $symbElem->appendChild($collElem);
         }
     }
     $metaElem = $newDoc->createElement('metadata');
     $metaElem->appendChild($symbElem);
     if ($this->schemaType == 'coge' && $this->geolocateVariables) {
         if (!$this->serverDomain) {
             $this->serverDomain = "http://";
             if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) {
                 $this->serverDomain = "https://";
             }
             $this->serverDomain .= $_SERVER["SERVER_NAME"];
             if ($_SERVER["SERVER_PORT"] && $_SERVER["SERVER_PORT"] != 80) {
                 $this->serverDomain .= ':' . $_SERVER["SERVER_PORT"];
             }
         }
         $urlPathPrefix = '';
         if ($this->serverDomain) {
             $urlPathPrefix = $this->serverDomain . $GLOBALS['CLIENT_ROOT'] . (substr($GLOBALS['CLIENT_ROOT'], -1) == '/' ? '' : '/');
             $urlPathPrefix .= 'collections/individual/index.php';
             //Add Geolocate metadata
             $glElem = $newDoc->createElement('geoLocate');
             $glElem->appendChild($newDoc->createElement('dataSourcePrimaryName', $this->geolocateVariables['cogename']));
             $glElem->appendChild($newDoc->createElement('dataSourceSecondaryName', $this->geolocateVariables['cogedescr']));
             $glElem->appendChild($newDoc->createElement('targetCommunityName', $this->geolocateVariables['cogecomm']));
             #if(isset($this->geolocateVariables['targetcommunityidentifier'])) $glElem->appendChild($newDoc->createElement('targetCommunityIdentifier',''));
             $glElem->appendChild($newDoc->createElement('specimenHyperlinkBase', $urlPathPrefix));
             $glElem->appendChild($newDoc->createElement('specimenHyperlinkParameter', 'occid'));
             $glElem->appendChild($newDoc->createElement('specimenHyperlinkValueField', 'Id'));
             $metaElem->appendChild($glElem);
         }
     }
     $addMetaElem = $newDoc->createElement('additionalMetadata');
     $addMetaElem->appendChild($metaElem);
     $rootElem->appendChild($addMetaElem);
     return $newDoc;
 }
コード例 #13
0
 public function addOccurrence($occArr)
 {
     $status = "SUCCESS: new occurrence record submitted successfully ";
     if ($occArr) {
         $fieldArr = array('basisOfRecord' => 's', 'catalogNumber' => 's', 'otherCatalogNumbers' => 's', 'occurrenceid' => 's', 'ownerInstitutionCode' => 's', 'family' => 's', 'sciname' => 's', 'tidinterpreted' => 'n', 'scientificNameAuthorship' => 's', 'identifiedBy' => 's', 'dateIdentified' => 's', 'identificationReferences' => 's', 'identificationremarks' => 's', 'taxonRemarks' => 's', 'identificationQualifier' => 's', 'typeStatus' => 's', 'recordedBy' => 's', 'recordNumber' => 's', 'associatedCollectors' => 's', 'eventDate' => 'd', 'year' => 'n', 'month' => 'n', 'day' => 'n', 'startDayOfYear' => 'n', 'endDayOfYear' => 'n', 'verbatimEventDate' => 's', 'habitat' => 's', 'substrate' => 's', 'fieldnumber' => 's', 'occurrenceRemarks' => 's', 'associatedTaxa' => 's', 'verbatimattributes' => 's', 'dynamicProperties' => 's', 'reproductiveCondition' => 's', 'cultivationStatus' => 's', 'establishmentMeans' => 's', 'lifestage' => 's', 'sex' => 's', 'individualcount' => 's', 'samplingprotocol' => 's', 'preparations' => 's', 'country' => 's', 'stateProvince' => 's', 'county' => 's', 'municipality' => 's', 'locality' => 's', 'localitySecurity' => 'n', 'localitysecurityreason' => 's', 'decimalLatitude' => 'n', 'decimalLongitude' => 'n', 'geodeticDatum' => 's', 'coordinateUncertaintyInMeters' => 'n', 'verbatimCoordinates' => 's', 'footprintwkt' => 's', 'georeferencedBy' => 's', 'georeferenceProtocol' => 's', 'georeferenceSources' => 's', 'georeferenceVerificationStatus' => 's', 'georeferenceRemarks' => 's', 'minimumElevationInMeters' => 'n', 'maximumElevationInMeters' => 'n', 'verbatimElevation' => 's', 'disposition' => 's', 'language' => 's', 'duplicateQuantity' => 'n', 'labelProject' => 's', 'processingstatus' => 's', 'recordEnteredBy' => 's', 'observeruid' => 'n', 'dateentered' => 'd', 'genericcolumn2' => 's');
         $sql = 'INSERT INTO omoccurrences(collid, ' . implode(array_keys($fieldArr), ',') . ') ' . 'VALUES (' . $occArr["collid"];
         $fieldArr = array_change_key_case($fieldArr);
         if (array_key_exists('cultivationstatus', $occArr)) {
             $occArr['cultivationstatus'] = '1';
         }
         if (array_key_exists('localitysecurity', $occArr)) {
             $occArr['localitysecurity'] = '1';
         }
         if (!isset($occArr['dateentered']) || !$occArr['dateentered']) {
             $occArr['dateentered'] = date('Y-m-d H:i:s');
         }
         if (!isset($occArr['basisofrecord']) || !$occArr['basisofrecord']) {
             $occArr['basisofrecord'] = strpos($this->collMap['colltype'], 'Observations') !== false ? 'HumanObservation' : 'PreservedSpecimen';
         }
         //Temp code for WeDigBio date entry event
         $occArr['genericcolumn2'] = $_SERVER['REMOTE_ADDR'];
         ///////////////////
         foreach ($fieldArr as $fieldStr => $fieldType) {
             $fieldValue = '';
             if (array_key_exists($fieldStr, $occArr)) {
                 $fieldValue = $occArr[$fieldStr];
             }
             if ($fieldValue) {
                 if ($fieldType == 'n') {
                     if (is_numeric($fieldValue)) {
                         $sql .= ', ' . $fieldValue;
                     } else {
                         $sql .= ', NULL';
                     }
                 } else {
                     //Is string or date
                     $sql .= ', "' . $this->cleanInStr($fieldValue) . '"';
                 }
             } else {
                 $sql .= ', NULL';
             }
         }
         $sql .= ')';
         //echo "<div>".$sql."</div>";
         if ($this->conn->query($sql)) {
             $this->occid = $this->conn->insert_id;
             //Update collection stats
             $this->conn->query('UPDATE omcollectionstats SET recordcnt = recordcnt + 1 WHERE collid = ' . $this->collId);
             //Create and insert Symbiota GUID (UUID)
             $guid = UuidFactory::getUuidV4();
             if (!$this->conn->query('INSERT INTO guidoccurrences(guid,occid) VALUES("' . $guid . '",' . $this->occid . ')')) {
                 $status .= '(WARNING: Symbiota GUID mapping failed) ';
             }
             //deal with Exsiccati, if applicable
             if (isset($occArr['ometid']) && isset($occArr['exsnumber'])) {
                 //If exsiccati titie is submitted, trim off first character that was used to force Google Chrom to sort correctly
                 $ometid = $this->cleanInStr($occArr['ometid']);
                 $exsNumber = $this->cleanInStr($occArr['exsnumber']);
                 if ($ometid && $exsNumber) {
                     $exsNumberId = '';
                     $sql = 'SELECT omenid FROM omexsiccatinumbers WHERE ometid = ' . $ometid . ' AND exsnumber = "' . $exsNumber . '"';
                     $rs = $this->conn->query($sql);
                     if ($r = $rs->fetch_object()) {
                         $exsNumberId = $r->omenid;
                     }
                     $rs->free();
                     if (!$exsNumberId) {
                         //There is no exsnumber for that title, thus lets add it and record exsomenid
                         $sqlNum = 'INSERT INTO omexsiccatinumbers(ometid,exsnumber) ' . 'VALUES(' . $ometid . ',"' . $exsNumber . '")';
                         if ($this->conn->query($sqlNum)) {
                             $exsNumberId = $this->conn->insert_id;
                         } else {
                             $status .= '(WARNING adding exsiccati number: ' . $this->conn->error . ') ';
                         }
                     }
                     if ($exsNumberId) {
                         //Add exsiccati
                         $sql1 = 'INSERT INTO omexsiccatiocclink(omenid, occid) ' . 'VALUES(' . $exsNumberId . ',' . $this->occid . ')';
                         if (!$this->conn->query($sql1)) {
                             $status .= '(WARNING adding exsiccati: ' . $this->conn->error . ') ';
                         }
                     }
                 }
             }
             //Deal with checklist voucher
             if (isset($occArr['clidvoucher']) && $occArr['clidvoucher']) {
                 if (isset($occArr['tidinterpreted']) && $occArr['tidinterpreted']) {
                     //Check to see it the name is in the list, if not, add it
                     $clTid = 0;
                     $sqlCl = 'SELECT cl.tid ' . 'FROM fmchklsttaxalink cl INNER JOIN taxstatus ts1 ON cl.tid = ts1.tidaccepted ' . 'INNER JOIN taxstatus ts2 ON ts1.tidaccepted = ts2.tidaccepted ' . 'WHERE ts1.taxauthid = 1 AND ts2.taxauthid = 1 AND ts2.tid = ' . $occArr['tidinterpreted'] . ' AND cl.clid = ' . $occArr['clidvoucher'];
                     $rsCl = $this->conn->query($sqlCl);
                     //echo $sqlCl;
                     if ($rowCl = $rsCl->fetch_object()) {
                         $clTid = $rowCl->tid;
                     }
                     $rsCl->free();
                     if (!$clTid) {
                         $sqlCl1 = 'INSERT INTO fmchklsttaxalink(clid, tid) VALUES(' . $occArr['clidvoucher'] . ',' . $occArr['tidinterpreted'] . ') ';
                         if ($this->conn->query($sqlCl1)) {
                             $clTid = $occArr['tidinterpreted'];
                         } else {
                             $status .= '(WARNING adding scientific name to checklist: ' . $this->conn->error . ') ';
                         }
                     }
                     //Add voucher
                     if ($clTid) {
                         $sqlCl2 = 'INSERT INTO fmvouchers(occid,clid,tid) ' . 'values(' . $this->occid . ',' . $occArr['clidvoucher'] . ',' . $clTid . ')';
                         //echo $sqlCl2;
                         if (!$this->conn->query($sqlCl2)) {
                             $status .= '(WARNING adding voucher link: ' . $this->conn->error . ') ';
                         }
                     }
                 }
             }
             //Deal with duplicate clustering
             if (isset($occArr['linkdupe']) && $occArr['linkdupe']) {
                 $dupTitle = $occArr['recordedby'] . ' ' . $occArr['recordnumber'] . ' ' . $occArr['eventdate'];
                 $status .= $this->linkDuplicates($occArr['linkdupe'], $dupTitle);
             }
         } else {
             $status = "ERROR - failed to add occurrence record: " . $this->conn->error . '<br/>SQL: ' . $sql;
         }
     }
     return $status;
 }
コード例 #14
0
 protected function finalCleanup()
 {
     $this->outputMsg('<li>Transfer process complete</li>');
     //Update uploaddate
     $sql = 'UPDATE omcollectionstats SET uploaddate = CURDATE() WHERE collid = ' . $this->collId;
     $this->conn->query($sql);
     //Remove records from occurrence temp table (uploadspectemp)
     $sql = 'DELETE FROM uploadspectemp WHERE (collid = ' . $this->collId . ') OR (initialtimestamp < DATE_SUB(CURDATE(),INTERVAL 3 DAY))';
     $this->conn->query($sql);
     //Optimize table to reset indexes
     $this->conn->query('OPTIMIZE TABLE uploadspectemp');
     //Remove records from determination temp table (uploaddetermtemp)
     $sql = 'DELETE FROM uploaddetermtemp WHERE (collid = ' . $this->collId . ') OR (initialtimestamp < DATE_SUB(CURDATE(),INTERVAL 3 DAY))';
     $this->conn->query($sql);
     //Optimize table to reset indexes
     $this->conn->query('OPTIMIZE TABLE uploaddetermtemp');
     //Remove records from image temp table (uploadimagetemp)
     $sql = 'DELETE FROM uploadimagetemp WHERE (collid = ' . $this->collId . ') OR (initialtimestamp < DATE_SUB(CURDATE(),INTERVAL 3 DAY))';
     $this->conn->query($sql);
     //Optimize table to reset indexes
     $this->conn->query('OPTIMIZE TABLE uploadimagetemp');
     //Do some more cleaning of the data after it haas been indexed in the omoccurrences table
     $occurUtil = new OccurrenceUtilities();
     $this->outputMsg('<li>Cleaning house</li>');
     ob_flush();
     flush();
     if (!$occurUtil->generalOccurrenceCleaning($this->collId)) {
         $errorArr = $occurUtil->getErrorArr();
         foreach ($errorArr as $errorStr) {
             echo '<li style="margin-left:20px;">' . $errorStr . '</li>';
         }
     }
     $this->outputMsg('<li style="margin-left:10px;">Protecting sensitive species...</li>');
     ob_flush();
     flush();
     if (!$occurUtil->protectRareSpecies($this->collId)) {
         $errorArr = $occurUtil->getErrorArr();
         foreach ($errorArr as $errorStr) {
             echo '<li style="margin-left:20px;">' . $errorStr . '</li>';
         }
     }
     $this->outputMsg('<li style="margin-left:10px;">Updating statistics...</li>');
     ob_flush();
     flush();
     if (!$occurUtil->updateCollectionStats($this->collId)) {
         $errorArr = $occurUtil->getErrorArr();
         foreach ($errorArr as $errorStr) {
             echo '<li style="margin-left:20px;">' . $errorStr . '</li>';
         }
     }
     /*
     $this->outputMsg('<li style="margin-left:10px;">Searching for duplicate Catalog Numbers... ');
     ob_flush();
     flush();
     $sql = 'SELECT catalognumber FROM omoccurrences GROUP BY catalognumber, collid '.
     	'HAVING Count(*)>1 AND collid = '.$this->collId.' AND catalognumber IS NOT NULL';
     $rs = $this->conn->query($sql);
     if($rs->num_rows){
     	$this->outputMsg('<span style="color:red;">Duplicate Catalog Numbers exist</span></li>');
     	$this->outputMsg('<li style="margin-left:10px;">');
     	$this->outputMsg('Open <a href="../cleaning/occurrencecleaner.php?collid='.$this->collId.'&action=listdupscatalog" target="_blank">Occurrence Cleaner</a> to resolve this issue');
     	$this->outputMsg('</li>');
     }
     else{
     	$this->outputMsg('All good!</li>');
     }
     $rs->free();
     */
     $this->outputMsg('<li style="margin-left:10px;">Populating global unique identifiers (GUIDs) for all records... </li>');
     ob_flush();
     flush();
     $uuidManager = new UuidFactory();
     $uuidManager->setSilent(1);
     $uuidManager->populateGuids();
     if ($this->imageTransferCount) {
         $this->outputMsg('<li style="margin-left:10px;">Building thumbnails for ' . $this->imageTransferCount . ' specimen images... </li>');
         ob_flush();
         flush();
         //Clean and populate null basic url and thumbnailurl fields
         $imgManager = new ImageCleaner();
         $imgManager->setVerbose(0);
         $imgManager->buildThumbnailImages($this->collId);
     }
 }
コード例 #15
0
ファイル: AgentManager.php プロジェクト: Symbiota/Symbiota
 public function setuuid($uuid)
 {
     if (!UuidFactory::is_valid(str_replace("urn:uuid:", "", $uuid))) {
         throw new Exception("Not a valid uuid [{$uuid}].");
     }
     if (strlen($uuid) > Agent::UUID_SIZE) {
         throw new Exception('Value exceeds field length.');
     }
     $this->uuid = $this->cleanInStr($uuid);
     $this->dirty = true;
 }
コード例 #16
0
ファイル: handler.php プロジェクト: Symbiota/Symbiota
/**
 * Obtain agentid or uuid from request and lookup agent.
 * @return agent found, or null.
 */
function loadAgent()
{
    $agent = null;
    $agentid = preg_replace('[^0-9]', '', array_key_exists("agentid", $_REQUEST) ? $_REQUEST["agentid"] : "");
    $uuid = array_key_exists("uuid", $_REQUEST) ? $_REQUEST["uuid"] : "";
    if (strlen($agentid) > 0) {
        $agent = new Agent();
        $agent->load($agentid);
    } elseif (strlen($uuid) > 0) {
        if (UuidFactory::isValid($uuid)) {
            $agent = new Agent();
            $agent->loadByGUID($uuid);
        }
    }
    return $agent;
}