From cce3f219caa99ad9a71a5f67ef6f9ac6e9d35e91 Mon Sep 17 00:00:00 2001 From: Edward Gilbert Date: Tue, 11 Jan 2022 14:57:49 -0700 Subject: [PATCH] Specimen Upload - Integrate omoccuridentifiers table into specimen upload option to match on other identifiers --- classes/OccurrenceSesar.php | 13 ++++++ classes/OccurrenceSupport.php | 27 +++++-------- classes/SpecUpload.php | 75 ++++++++++++++++++----------------- classes/SpecUploadBase.php | 19 ++++++--- 4 files changed, 74 insertions(+), 60 deletions(-) diff --git a/classes/OccurrenceSesar.php b/classes/OccurrenceSesar.php index 974fc84ef0..6561ea0ca8 100644 --- a/classes/OccurrenceSesar.php +++ b/classes/OccurrenceSesar.php @@ -713,6 +713,19 @@ public function syncIGSN($occid,$catalogNumber,$igsn){ } $rs->free(); + $sql = 'SELECT identifierValue FROM omoccuridentifiers WHERE occid = '.$occid; + $rs = $this->conn->query($sql); + while($r = $rs->fetch_object()){ + if($r->identifierValue != $catalogNumber && $r->identifierValue != $catalogNumber){ + $retArr['errCode'] = 2; + $catNum = $r->identifierValue; + if(isset($retArr['catNum'])) $catNum .= ', '.$retArr['catNum']; + $retArr['catNum'] = $catNum; + $ok = false; + } + } + $rs->free(); + if($ok){ $sqlUpdate = 'UPDATE omoccurrences SET occurrenceid = "'.$this->cleanInStr($igsn).'" WHERE occid = '.$occid; if($this->conn->query($sqlUpdate)){ diff --git a/classes/OccurrenceSupport.php b/classes/OccurrenceSupport.php index 8cdd4d8ef7..b1e4142aef 100644 --- a/classes/OccurrenceSupport.php +++ b/classes/OccurrenceSupport.php @@ -123,30 +123,21 @@ public function getOccurrenceList($collid, $catalogNumber, $otherCatalogNumbers, $retArr = Array(); if(!$catalogNumber && !$otherCatalogNumbers && !$recordedBy && !$recordNumber) return $retArr; $sqlWhere = ""; - if($collid){ - $sqlWhere .= "AND (o.collid = ".$collid.") "; - } - if($catalogNumber){ - $sqlWhere .= 'AND (o.catalognumber = "'.$catalogNumber.'") '; - } - if($otherCatalogNumbers){ - $sqlWhere .= 'AND (o.othercatalognumbers = "'.$otherCatalogNumbers.'") '; - } + if($collid) $sqlWhere .= "AND (o.collid = ".$collid.") "; + if($catalogNumber) $sqlWhere .= 'AND (o.catalognumber = "'.$catalogNumber.'") '; + if($otherCatalogNumbers) $sqlWhere .= 'AND (o.othercatalognumbers = "'.$otherCatalogNumbers.'" OR i.identifiervalue = "'.$otherCatalogNumbers.'") '; if($recordedBy){ if(strlen($recordedBy) < 4 || in_array(strtolower($recordedBy),array('best','little'))){ //Need to avoid FULLTEXT stopwords interfering with return $sqlWhere .= 'AND (o.recordedby LIKE "%'.$recordedBy.'%") '; } - else{ - $sqlWhere .= 'AND (MATCH(f.recordedby) AGAINST("'.$recordedBy.'")) '; - } - } - if($recordNumber){ - $sqlWhere .= 'AND (o.recordnumber = "'.$recordNumber.'") '; + else $sqlWhere .= 'AND (MATCH(f.recordedby) AGAINST("'.$recordedBy.'")) '; } - $sql = 'SELECT o.occid, o.recordedby, o.recordnumber, o.eventdate, CONCAT_WS("; ",o.stateprovince, o.county, o.locality) AS locality '. - 'FROM omoccurrences o LEFT JOIN omoccurrencesfulltext f ON o.occid = f.occid '. - 'WHERE '.substr($sqlWhere,4); + if($recordNumber) $sqlWhere .= 'AND (o.recordnumber = "'.$recordNumber.'") '; + $sql = 'SELECT o.occid, o.recordedby, o.recordnumber, o.eventdate, CONCAT_WS("; ",o.stateprovince, o.county, o.locality) AS locality + FROM omoccurrences o LEFT JOIN omoccurrencesfulltext f ON o.occid = f.occid '; + if($otherCatalogNumbers) $sql .= 'LEFT JOIN omoccuridentifiers i ON o.occid = i.occid '; + $sql .= 'WHERE '.substr($sqlWhere,4); //echo $sql; $rs = $this->conn->query($sql); while($row = $rs->fetch_object()){ diff --git a/classes/SpecUpload.php b/classes/SpecUpload.php index 0bef4cd2f3..4fd9da88e4 100644 --- a/classes/SpecUpload.php +++ b/classes/SpecUpload.php @@ -152,12 +152,12 @@ public function validateSecurityKey($k){ $sql = 'SELECT collid FROM omcollections WHERE securitykey = "'.$k.'"'; //echo $sql; $rs = $this->conn->query($sql); - if($r = $rs->fetch_object()){ - $this->setCollId($r->collid); - } - else{ - return false; - } + if($r = $rs->fetch_object()){ + $this->setCollId($r->collid); + } + else{ + return false; + } $rs->free(); } elseif(!isset($this->collMetadataArr["securitykey"])){ @@ -246,7 +246,8 @@ private function getPendingImportSql($searchVariables){ if($searchVariables == 'matchappend'){ $sql = 'SELECT DISTINCT u.occid, u.dbpk, u.'.implode(',u.',$occFieldArr).' '. 'FROM uploadspectemp u INNER JOIN omoccurrences o ON u.collid = o.collid '. - 'WHERE (u.collid IN('.$this->collId.')) AND (u.occid IS NULL) AND (u.catalogNumber = o.catalogNumber OR u.othercatalogNumbers = o.othercatalogNumbers) '; + 'LEFT JOIN omoccuridentifiers i ON o.occid = i.occid '. + 'WHERE (u.collid IN('.$this->collId.')) AND (u.occid IS NULL) AND (u.catalogNumber = o.catalogNumber OR u.othercatalogNumbers = o.othercatalogNumbers OR u.othercatalogNumbers = i.identifiervalue) '; } elseif($searchVariables == 'sync'){ $sql = 'SELECT DISTINCT u.occid, u.dbpk, u.'.implode(',u.',$occFieldArr).' '. @@ -317,38 +318,38 @@ public function getUploadCount(){ } //Profile management - public function readUploadParameters(){ - if($this->uspid){ + public function readUploadParameters(){ + if($this->uspid){ $sql = 'SELECT usp.collid, usp.title, usp.Platform, usp.server, usp.port, usp.Username, usp.Password, usp.SchemaName, '. - 'usp.code, usp.path, usp.pkfield, usp.querystr, usp.cleanupsp, cs.uploaddate, usp.uploadtype '. + 'usp.code, usp.path, usp.pkfield, usp.querystr, usp.cleanupsp, cs.uploaddate, usp.uploadtype '. 'FROM uploadspecparameters usp LEFT JOIN omcollectionstats cs ON usp.collid = cs.collid '. - 'WHERE (usp.uspid = '.$this->uspid.')'; + 'WHERE (usp.uspid = '.$this->uspid.')'; //echo $sql; $result = $this->conn->query($sql); - if($row = $result->fetch_object()){ - if(!$this->collId) $this->collId = $row->collid; - $this->title = $row->title; - $this->platform = $row->Platform; - $this->server = $row->server; - $this->port = $row->port; - $this->username = $row->Username; - $this->password = $row->Password; - $this->schemaName = $row->SchemaName; - $this->code = $row->code; - if(!$this->path) $this->path = $row->path; - $this->pKField = strtolower($row->pkfield); - $this->queryStr = $row->querystr; - $this->storedProcedure = $row->cleanupsp; - $this->lastUploadDate = $row->uploaddate; - $this->uploadType = $row->uploadtype; - if(!$this->lastUploadDate) $this->lastUploadDate = date('Y-m-d H:i:s'); - } - $result->free(); - } - } - - public function editUploadProfile($profileArr){ - $sql = 'UPDATE uploadspecparameters SET title = "'.$this->cleanInStr($profileArr['title']).'"'. + if($row = $result->fetch_object()){ + if(!$this->collId) $this->collId = $row->collid; + $this->title = $row->title; + $this->platform = $row->Platform; + $this->server = $row->server; + $this->port = $row->port; + $this->username = $row->Username; + $this->password = $row->Password; + $this->schemaName = $row->SchemaName; + $this->code = $row->code; + if(!$this->path) $this->path = $row->path; + $this->pKField = strtolower($row->pkfield); + $this->queryStr = $row->querystr; + $this->storedProcedure = $row->cleanupsp; + $this->lastUploadDate = $row->uploaddate; + $this->uploadType = $row->uploadtype; + if(!$this->lastUploadDate) $this->lastUploadDate = date('Y-m-d H:i:s'); + } + $result->free(); + } + } + + public function editUploadProfile($profileArr){ + $sql = 'UPDATE uploadspecparameters SET title = "'.$this->cleanInStr($profileArr['title']).'"'. ', platform = '.($profileArr['platform']?'"'.$profileArr['platform'].'"':'NULL'). ', server = '.($profileArr['server']?'"'.$profileArr['server'].'"':'NULL'). ', port = '.($profileArr['port']?$profileArr['port']:'NULL'). @@ -369,7 +370,7 @@ public function editUploadProfile($profileArr){ return true; } - public function createUploadProfile($profileArr){ + public function createUploadProfile($profileArr){ $sql = 'INSERT INTO uploadspecparameters(collid, uploadtype, title, platform, server, port, code, path, '. 'pkfield, username, password, schemaname, cleanupsp, querystr) VALUES ('.$this->collId.','. $profileArr['uploadtype'].',"'.$this->cleanInStr($profileArr['title']).'",'. @@ -394,7 +395,7 @@ public function createUploadProfile($profileArr){ } } - public function deleteUploadProfile($uspid){ + public function deleteUploadProfile($uspid){ $sql = 'DELETE FROM uploadspecparameters WHERE (uspid = '.$uspid.')'; if(!$this->conn->query($sql)){ $this->errorStr = '
Error Adding Upload Parameters: '.$this->conn->error.'
'.$sql.'
'; diff --git a/classes/SpecUploadBase.php b/classes/SpecUploadBase.php index f0bae7ca93..19946f8400 100644 --- a/classes/SpecUploadBase.php +++ b/classes/SpecUploadBase.php @@ -547,12 +547,20 @@ protected function cleanUpload(){ } if($this->matchOtherCatalogNumbers){ //Match records based on other Catalog Numbers fields - $sql2 = 'UPDATE uploadspectemp u INNER JOIN omoccurrences o ON (u.otherCatalogNumbers = o.otherCatalogNumbers) AND (u.collid = o.collid) '. + $sql2 = 'UPDATE uploadspectemp u INNER JOIN omoccurrences o ON u.collid = o.collid '. 'SET u.occid = o.occid '. - 'WHERE (u.collid IN('.$this->collId.')) AND (u.occid IS NULL) AND (u.othercatalogNumbers IS NOT NULL) AND (o.othercatalogNumbers IS NOT NULL) '; - if($this->collMetadataArr['colltype'] == 'General Observations' && $this->observerUid) $sql .= ' AND o.observeruid = '.$this->observerUid; + 'WHERE (u.collid IN('.$this->collId.')) AND (u.occid IS NULL) AND (u.otherCatalogNumbers = o.otherCatalogNumbers) '; + if($this->collMetadataArr['colltype'] == 'General Observations' && $this->observerUid) $sql2 .= ' AND o.observeruid = '.$this->observerUid; if(!$this->conn->query($sql2)){ - $this->outputMsg('
  • Warning: unable to match on other catalog numbers: '.$this->conn->error.'
  • '); + $this->outputMsg('
  • Warning: unable to match on otherCatalogNumbers: '.$this->conn->error.'
  • '); + } + $sql2b = 'UPDATE uploadspectemp u INNER JOIN omoccurrences o ON u.collid = o.collid '. + 'INNER JOIN omoccuridentifiers i ON o.occid = i.occid '. + 'SET u.occid = o.occid '. + 'WHERE (u.collid IN('.$this->collId.')) AND (u.occid IS NULL) AND (u.othercatalogNumbers = i.identifiervalue) '; + if($this->collMetadataArr['colltype'] == 'General Observations' && $this->observerUid) $sql2b .= ' AND o.observeruid = '.$this->observerUid; + if(!$this->conn->query($sql2b)){ + $this->outputMsg('
  • Warning: unable to match on omoccuridentifiers: '.$this->conn->error.'
  • '); } } } @@ -703,7 +711,8 @@ public function getTransferReport(){ //Records that can be matched on Catalog Number, but will be appended $sql = 'SELECT count(o.occid) AS cnt '. 'FROM uploadspectemp u INNER JOIN omoccurrences o ON u.collid = o.collid '. - 'WHERE (u.collid IN('.$this->collId.')) AND (u.occid IS NULL) AND (u.catalogNumber = o.catalogNumber OR u.othercatalogNumbers = o.othercatalogNumbers) '; + 'LEFT JOIN omoccuridentifiers i ON o.occid = i.occid '. + 'WHERE (u.collid IN('.$this->collId.')) AND (u.occid IS NULL) AND (u.catalogNumber = o.catalogNumber OR u.othercatalogNumbers = o.othercatalogNumbers OR u.othercatalogNumbers = i.identifierValue) '; $rs = $this->conn->query($sql); if($r = $rs->fetch_object()){ $reportArr['matchappend'] = $r->cnt;