Skip to content

Commit

Permalink
Merge pull request #34 from greatergoodcharities/master
Browse files Browse the repository at this point in the history
Merge BioKIC/Symbiota hotfixes
  • Loading branch information
egbot authored Dec 27, 2023
2 parents 1513c21 + 6b35478 commit 0624117
Show file tree
Hide file tree
Showing 1,800 changed files with 79,911 additions and 109 deletions.
6 changes: 3 additions & 3 deletions classes/ChecklistManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -327,9 +327,9 @@ public function getTaxaList($pageNumber = 1,$retLimit = 500){
}
if($this->showSubgenera){
$this->setSubgenera();
$sciname = array_column($this->taxaList, 'sciname');
$group = array_column($this->taxaList, 'taxongroup');
array_multisort($group, $sciname, $this->taxaList);
uasort($this->taxaList, function($a, $b) {
return $a['sciname'] <=> $b['sciname'];
});
}
}
return $this->taxaList;
Expand Down
6 changes: 3 additions & 3 deletions classes/DwcArchiverCore.php
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ private function applyConditions(){
$this->conditionSql .= 'AND (o.collid NOT IN(' . $_REQUEST['exclude'] . ')) ';
}
if (array_key_exists('datasetid', $_REQUEST) && is_numeric($_REQUEST['datasetid'])) {
$this->conditionSql .= 'AND (d.datasetid IN(' . $_REQUEST['datasetid'] . ')) ';
$this->conditionSql .= 'AND (ds.datasetid IN(' . $_REQUEST['datasetid'] . ')) ';
}
$sqlFrag = '';
if ($this->conditionArr) {
Expand Down Expand Up @@ -379,8 +379,8 @@ private function getTableJoins(){
//Search criteria came from custom search page
$sql .= 'LEFT JOIN fmvouchers v ON o.occid = v.occid LEFT JOIN fmchklsttaxalink ctl ON v.clTaxaID = ctl.clTaxaID ';
}
if (stripos($this->conditionSql, 'd.datasetid')) {
$sql .= 'INNER JOIN omoccurdatasetlink d ON o.occid = d.occid ';
if (stripos($this->conditionSql, 'ds.datasetid')) {
$sql .= 'INNER JOIN omoccurdatasetlink ds ON o.occid = ds.occid ';
}
if (stripos($this->conditionSql, 'p.point')) {
//Search criteria came from map search page
Expand Down
4 changes: 2 additions & 2 deletions classes/DwcArchiverImage.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ public static function getSqlImages($fieldArr, $conditionSql, $redactLocalities,
if(strpos($conditionSql,'MATCH(f.recordedby)') || strpos($conditionSql,'MATCH(f.locality)')){
$sql .= 'INNER JOIN omoccurrencesfulltext f ON o.occid = f.occid ';
}
if(strpos($conditionSql,'d.datasetid')){
$sql .= 'LEFT JOIN omoccurdatasetlink d ON o.occid = d.occid ';
if(strpos($conditionSql,'ds.datasetid')){
$sql .= 'LEFT JOIN omoccurdatasetlink ds ON o.occid = ds.occid ';
}
if(stripos($conditionSql,'a.stateid')){
//Search is limited by occurrence attribute
Expand Down
14 changes: 8 additions & 6 deletions classes/KeyDataManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public function getData(){
}

private function getCharList(){
//Used in first key, can probably delete once first key is deprecated
$returnArray = Array();
//Rate char list: Get list of char that are coded for a percentage of taxa list that is greater than
if($this->sql){
Expand Down Expand Up @@ -102,7 +103,7 @@ private function getCharList(){
if($row->helpurl) $charName .= ' <a class="infoAnchor" href="'.$row->helpurl.'" target="_blank" title="external resource"><img src="../images/info.png"></a>';
if($row->glossid) $charName .= ' <a class="infoAnchor" href="" onclick="openGlossaryPopup('.$row->glossid.');return false;" title="glossary term"><img src="../images/info.png"></a>';
$diffRank = false;
if($row->DifficultyRank && $row->DifficultyRank > 1 && !array_key_exists($charCID,$this->charArr)) $diffRank = true;
//if($row->DifficultyRank && $row->DifficultyRank > 1 && !array_key_exists($charCID,$this->charArr)) $diffRank = true;

//Set HeadingName within the $charArray, if not yet set
$headingArray[$headingID]['HeadingNames'][$language] = $row->headingname;
Expand Down Expand Up @@ -221,7 +222,7 @@ public function getCharArr(){
if($r->helpurl) $charName .= ' <a class="infoAnchor" href="'.$r->helpurl.'" target="_blank" title="external resource"><img src="../images/info.png" /></a>';
if($r->charglossid) $charName .= ' <a class="infoAnchor" href="" onclick="openGlossaryPopup('.$r->charglossid.');return false;" title="glossary term"><img src="../images/info.png"></a>';
$diffRank = false;
if($r->DifficultyRank && $r->DifficultyRank > 1 && !array_key_exists($charCID,$this->charArr)) $diffRank = true;
//if($r->DifficultyRank && $r->DifficultyRank > 1 && !array_key_exists($charCID,$this->charArr)) $diffRank = true;

//Set HeadingName within the $charArray, if not yet set
$language = 'English';
Expand Down Expand Up @@ -454,7 +455,7 @@ public function getIntroHtml(){

public function setProject($projValue){
if(is_numeric($projValue)){
$this->pid = $projValue;
$this->pid = filter_var($projValue, FILTER_SANITIZE_NUMBER_INT);
}
}

Expand Down Expand Up @@ -496,7 +497,8 @@ public function getTaxaFilterList(){
}

public function setClValue($clid){
$sql = "";
$clid = filter_var($clid, FILTER_SANITIZE_NUMBER_INT);
$sql = '';
if($this->dynClid){
$sql = 'SELECT d.name, d.details, d.type FROM fmdynamicchecklists d WHERE (dynclid = '.$this->dynClid.')';
$result = $this->conn->query($sql);
Expand Down Expand Up @@ -587,7 +589,7 @@ public function getClid(){

public function setDynClid($id){
if(is_numeric($id)){
$this->dynClid = $id;
$this->dynClid = filter_var($id, FILTER_SANITIZE_NUMBER_INT);
}
}

Expand All @@ -609,7 +611,7 @@ public function getClType(){

public function setRelevanceValue($rel){
if(is_numeric($rel)){
$this->relevanceValue = $rel;
$this->relevanceValue = filter_var($rel, FILTER_SANITIZE_NUMBER_INT);
}
}

Expand Down
2 changes: 1 addition & 1 deletion classes/OccurrenceIndividual.php
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,7 @@ public function isTaxonomicEditor(){
public function activateOrcidID($inStr){
$retStr = $inStr;
$m = array();
if(preg_match('#ORCID[\s:]+((https://orcid.org/)?\d{4}-\d{4}-\d{4}-\d{3}[0-9X])#', $inStr,$m)){
if(preg_match('#((https://orcid.org/)?\d{4}-\d{4}-\d{4}-\d{3}[0-9X])#', $inStr, $m)){
$orcidAnchor = $m[1];
if(substr($orcidAnchor,5) != 'https') $orcidAnchor = 'https://orcid.org/'.$orcidAnchor;
$orcidAnchor = '<a href="'.$orcidAnchor.'" target="_blank">'.$m[1].'</a>';
Expand Down
20 changes: 19 additions & 1 deletion classes/OccurrenceMaintenance.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public function generalOccurrenceCleaning(){
}

public function indexOccurrencesToTaxa(){
$this->outputMsg('Indexing validated scientific names (e.g. populating tidInterpreted)... ', 1);
$this->outputMsg('Indexing scientific names (e.g. populating tidInterpreted)... ', 1);

//Avoid using straight UPDATE SQL since they will often lock omoccurrences table for a significant amount of time when database is large
$occidArr = array();
Expand Down Expand Up @@ -175,6 +175,24 @@ public function indexOccurrencesToTaxa(){
}
$rs->free();
$this->batchUpdateTidInterpreted($occidArr);

//Match hybrids
/* Not activating due to taking too long to run on big datasets
$activeTid = 0;
$sql = 'SELECT t.tid, o.occid
FROM taxa t INNER JOIN omoccurrences o ON t.sciname LIKE REPLACE(o.sciname, "× ", "%×%")
WHERE o.tidinterpreted IS NULL AND o.sciname LIKE "%× %" ';
if($this->collidStr) $sql .= 'AND o.collid IN('.$this->collidStr.') ';
$sql .= 'ORDER BY t.tid';
$rs = $this->conn->query($sql);
while($r = $rs->fetch_object()){
if($occidArr && $r->tid != $activeTid) $this->batchUpdateTidInterpreted($occidArr);
$activeTid = $r->tid;
$occidArr[$r->tid][] = $r->occid;
}
$rs->free();
$this->batchUpdateTidInterpreted($occidArr);
*/
}

private function batchUpdateTidInterpreted(&$occidArr){
Expand Down
6 changes: 3 additions & 3 deletions classes/OccurrenceManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ protected function setSqlWhere(){
$sqlWhere .= OccurrenceSearchSupport::getDbWhereFrag($this->cleanInStr($this->searchTermArr['db']));
}
if(array_key_exists('datasetid',$this->searchTermArr)){
$sqlWhere .= 'AND (d.datasetid IN('.$this->searchTermArr['datasetid'].')) ';
$sqlWhere .= 'AND (ds.datasetid IN('.$this->searchTermArr['datasetid'].')) ';
$this->displaySearchArr[] = 'Dataset(s): '.$this->getDatasetTitle($this->searchTermArr['datasetid']);
}
$sqlWhere .= $this->getTaxonWhereFrag();
Expand Down Expand Up @@ -511,8 +511,8 @@ protected function getTableJoins($sqlWhere){
if(strpos($sqlWhere,'ts.family')){
$sqlJoin .= 'LEFT JOIN taxstatus ts ON o.tidinterpreted = ts.tid ';
}
if(strpos($sqlWhere,'d.datasetid')){
$sqlJoin .= 'INNER JOIN omoccurdatasetlink d ON o.occid = d.occid ';
if(strpos($sqlWhere,'ds.datasetid')){
$sqlJoin .= 'INNER JOIN omoccurdatasetlink ds ON o.occid = ds.occid ';
}
if(array_key_exists('polycoords',$this->searchTermArr) || strpos($sqlWhere,'p.point')){
$sqlJoin .= 'INNER JOIN omoccurpoints p ON o.occid = p.occid ';
Expand Down
9 changes: 6 additions & 3 deletions classes/OccurrenceSupport.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,13 @@ public function exportCsvFile($postArr){
public function getCollectionArr($filter){
//Used by /collections/misc/occurrencesearch.php
$retArr = array();
$filterStr = implode(',', $filter);
if($filter && !preg_match('/^[,\d]+$/', $filterStr)) return false;
$filterStr = null;
if($filter){
$filterStr = implode(',', $filter);
if(!preg_match('/^[,\d]+$/', $filterStr)) return false;
}
$sql = 'SELECT collid, collectionname FROM omcollections ';
if($filter) $sql .= 'WHERE collid IN('.$filterStr.')';
if($filterStr) $sql .= 'WHERE collid IN('.$filterStr.')';
$rs = $this->conn->query($sql);
while($row = $rs->fetch_object()){
$retArr[$row->collid] = $row->collectionname;
Expand Down
16 changes: 12 additions & 4 deletions classes/OccurrenceUtilities.php
Original file line number Diff line number Diff line change
Expand Up @@ -717,26 +717,34 @@ public static function occurrenceArrayCleaning($recMap){
//Clean and parse scientific name
$parsedArr = TaxonomyUtilities::parseScientificName($recMap['scientificname']);
$scinameStr = '';
if(array_key_exists('unitind1', $parsedArr)){
$scinameStr .= $parsedArr['unitind1'];
if($parsedArr['unitind1'] != '×' || $parsedArr['unitind1'] != '') $scinameStr .= ' ';
}
if(array_key_exists('unitname1',$parsedArr)){
$scinameStr = $parsedArr['unitname1'];
$scinameStr = $parsedArr['unitname1'].' ';
if(!array_key_exists('genus',$recMap) || $recMap['genus']){
$recMap['genus'] = $parsedArr['unitname1'];
}
}
if(array_key_exists('unitind2', $parsedArr)){
$scinameStr .= $parsedArr['unitind2'];
if($parsedArr['unitind2'] != '×') $scinameStr .= ' ';
}
if(array_key_exists('unitname2',$parsedArr)){
$scinameStr .= ' '.$parsedArr['unitname2'];
$scinameStr .= $parsedArr['unitname2'].' ';
if(!array_key_exists('specificepithet',$recMap) || !$recMap['specificepithet']){
$recMap['specificepithet'] = $parsedArr['unitname2'];
}
}
if(array_key_exists('unitind3',$parsedArr)){
$scinameStr .= ' '.$parsedArr['unitind3'];
$scinameStr .= $parsedArr['unitind3'].' ';
if((!array_key_exists('taxonrank',$recMap) || !$recMap['taxonrank'])){
$recMap['taxonrank'] = $parsedArr['unitind3'];
}
}
if(array_key_exists('unitname3',$parsedArr)){
$scinameStr .= ' '.$parsedArr['unitname3'];
$scinameStr .= $parsedArr['unitname3'];
if(!array_key_exists('infraspecificepithet',$recMap) || !$recMap['infraspecificepithet']){
$recMap['infraspecificepithet'] = $parsedArr['unitname3'];
}
Expand Down
2 changes: 1 addition & 1 deletion classes/OmCollections.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ private function getRequestArr($postArr){
if(isset($postArr['ccpk']) && is_numeric($postArr['ccpk'])) $retArr['ccpk'] = $postArr['ccpk'];
$retArr['securityKey'] = (isset($postArr['securityKey'])?$postArr['securityKey']:NULL);
$retArr['collectionGuid'] = (isset($postArr['collectionGuid'])?$postArr['collectionGuid']:NULL);
if(!$postArr['recordID'] && isset($postArr['recordID'])) $retArr['collectionGuid'] = $postArr['recordID'];
if(!$postArr['collectionGuid'] && isset($postArr['recordID'])) $retArr['collectionGuid'] = $postArr['recordID'];
return $retArr;
}

Expand Down
8 changes: 4 additions & 4 deletions classes/ProfileManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ private function authenticateUsingToken(){
private function authenticateUsingPassword($pwdStr){
$status = false;
if($pwdStr){
$sql = 'SELECT uid, firstname, username FROM users WHERE (password = PASSWORD(?)) AND (username = ? OR email = ?) ';
$sql = 'SELECT uid, firstname, username FROM users WHERE (password = CONCAT(\'*\', UPPER(SHA1(UNHEX(SHA1(?)))))) AND (username = ? OR email = ?) ';
if($stmt = $this->conn->prepare($sql)){
if($stmt->bind_param('sss', $pwdStr, $this->userName, $this->userName)){
$stmt->execute();
Expand Down Expand Up @@ -215,7 +215,7 @@ public function changePassword ($newPwd, $oldPwd = "", $isSelf = 0) {
$this->resetConnection();
if($isSelf){
$testStatus = true;
$sql = 'SELECT uid FROM users WHERE (uid = ?) AND (password = PASSWORD(?))';
$sql = 'SELECT uid FROM users WHERE (uid = ?) AND (password = CONCAT(\'*\', UPPER(SHA1(UNHEX(SHA1(?))))))';
if($stmt = $this->conn->prepare($sql)){
$stmt->bind_param('is', $this->uid, $oldPwd);
$stmt->execute();
Expand Down Expand Up @@ -279,7 +279,7 @@ public function resetPassword($un){

private function updatePassword($uid, $newPassword){
$status = false;
$sql = 'UPDATE users SET password = PASSWORD(?) WHERE (uid = ?)';
$sql = 'UPDATE users SET password = CONCAT(\'*\', UPPER(SHA1(UNHEX(SHA1(?))))) WHERE (uid = ?)';
if($stmt = $this->conn->prepare($sql)){
$stmt->bind_param('si', $newPassword, $uid);
$stmt->execute();
Expand Down Expand Up @@ -316,7 +316,7 @@ public function register($postArr){
$country = array_key_exists('country', $postArr) ? strip_tags($postArr['country']) : '';
$guid = array_key_exists('guid', $postArr) ? strip_tags($postArr['guid']) : '';

$sql = 'INSERT INTO users(username, password, email, firstName, lastName, title, institution, country, city, state, zip, guid) VALUES(?,PASSWORD(?),?,?,?,?,?,?,?,?,?,?)';
$sql = 'INSERT INTO users(username, password, email, firstName, lastName, title, institution, country, city, state, zip, guid) VALUES(?,CONCAT(\'*\', UPPER(SHA1(UNHEX(SHA1(?))))),?,?,?,?,?,?,?,?,?,?)';
$this->resetConnection();
if($stmt = $this->conn->prepare($sql)) {
$stmt->bind_param('ssssssssssss', $this->userName, $pwd, $email, $firstName, $lastName, $title, $institution, $country, $city, $state, $zip, $guid);
Expand Down
3 changes: 1 addition & 2 deletions classes/TaxonomyCleaner.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?php
include_once($SERVER_ROOT.'/config/dbconnection.php');
include_once($SERVER_ROOT.'/classes/Manager.php');
include_once($SERVER_ROOT.'/classes/TaxonomyUtilities.php');
include_once($SERVER_ROOT.'/classes/TaxonomyHarvester.php');
Expand Down Expand Up @@ -308,7 +307,7 @@ private function indexOccurrenceTaxa(){
ob_flush();

$occurMaintenance = new OccurrenceMaintenance($this->conn);
$occurMaintenance->setCollidStr($this->collid);
//$occurMaintenance->setCollidStr($this->collid);
$occurMaintenance->setVerbose(true);
$occurMaintenance->generalOccurrenceCleaning();
}
Expand Down
7 changes: 2 additions & 5 deletions classes/TaxonomyEditorManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ private function setParentName(){
//Edit Functions
public function submitTaxonEdits($postArr){
$statusStr = '';
$sciname = trim($postArr['unitind1'].$postArr['unitname1'].' '.$postArr['unitind2'].$postArr['unitname2'].' '.trim($postArr['unitind3'].' '.$postArr['unitname3']));
$sql = 'UPDATE taxa SET '.
'unitind1 = '.($postArr['unitind1']?'"'.$this->cleanInStr($postArr['unitind1']).'"':'NULL').', '.
'unitname1 = "'.$this->cleanInStr($postArr['unitname1']).'",'.
Expand All @@ -227,11 +228,7 @@ public function submitTaxonEdits($postArr){
'securitystatus = '.(is_numeric($postArr['securitystatus'])?$postArr['securitystatus']:'0').', '.
'modifiedUid = '.$GLOBALS['SYMB_UID'].', '.
'modifiedTimeStamp = "'.date('Y-m-d H:i:s').'",'.
'sciname = "'.$this->cleanInStr(($postArr["unitind1"]?$postArr["unitind1"]." ":"").
$postArr["unitname1"].($postArr["unitind2"]?" ".$postArr["unitind2"]:"").
($postArr["unitname2"]?" ".$postArr["unitname2"]:"").
($postArr["unitind3"]?" ".$postArr["unitind3"]:"").
($postArr["unitname3"]?" ".$postArr["unitname3"]:"")).'" '.
'sciname = "'.$this->cleanInStr($sciname).'" '.
'WHERE (tid = '.$this->tid.')';
//echo $sql;
if(!$this->conn->query($sql)){
Expand Down
33 changes: 29 additions & 4 deletions classes/TaxonomyHarvester.php
Original file line number Diff line number Diff line change
Expand Up @@ -152,15 +152,25 @@ private function addChecklistBankTaxon($taxonArr){
$resultArr = json_decode($retArr['str'], true);
if($resultArr['total']){
//Evaluate and rank each result to determine which is the best suited target
$adjustedName = $sciName;
if(isset($taxonArr['rankid']) && $taxonArr['rankid'] > 220) $adjustedName = trim($taxonArr['unitname1'].' '.$taxonArr['unitname2'].' '.$taxonArr['unitname3']);
$inputTestArr = array($sciName);
if(mb_strpos($sciName, '×') !== false) $inputTestArr[] = trim(str_replace(array('× ','×'), '', $sciName));
if(mb_strpos($sciName, '') !== false) $inputTestArr[] = trim(str_replace(array('',''), '', $sciName));
if(isset($taxonArr['rankid']) && $taxonArr['rankid'] > 220) $inputTestArr[] = trim($taxonArr['unitname1'].' '.$taxonArr['unitname2'].' '.$taxonArr['unitname3']);
$targetKey = 0;
$approvedNameUsageArr = array();
$rankingArr = array();
foreach($resultArr['result'] as $k => $result){
$cbNameUsage = $result['usage'];
$rankingArr[$k] = 0;
if($sciName != $cbNameUsage['name']['scientificName'] && $adjustedName != $cbNameUsage['name']['scientificName']){
$isNotSimilar = true;
if(in_array($cbNameUsage['name']['scientificName'], $inputTestArr)) $isNotSimilar = false;
if(mb_strpos($cbNameUsage['name']['scientificName'], '×') !== false){
if(in_array(trim(str_replace(array('× ','×'), '', $cbNameUsage['name']['scientificName'])), $inputTestArr)) $isNotSimilar = false;
}
if(mb_strpos($cbNameUsage['name']['scientificName'], '') !== false){
if(in_array(trim(str_replace(array('',''), '', $cbNameUsage['name']['scientificName'])), $inputTestArr)) $isNotSimilar = false;
}
if($isNotSimilar){
unset($rankingArr[$k]);
continue;
}
Expand All @@ -174,6 +184,7 @@ private function addChecklistBankTaxon($taxonArr){
$this->logOrEcho($msg, 2);
continue;
}
if($cbNameUsage['name']['scientificName'] == $sciName) $rankingArr[$k] += 3;
if(isset($taxonArr['taxonRank']) && isset($cbNameUsage['name']['rank']) && $taxonArr['taxonRank'] == $cbNameUsage['name']['rank']) $rankingArr[$k] += 2;
if($this->defaultFamily && $this->defaultFamily == $this->getChecklistBankParent($cbNameUsage, 'Family')) $rankingArr[$k] += 2;
if($cbNameUsage['status'] == 'accepted') $rankingArr[$k] += 3;
Expand Down Expand Up @@ -368,7 +379,10 @@ private function translateChecklistBankNode($nodeArr){
$taxonArr['sciname'] = $m[1].' '.$m[2];
}
}
if(!isset($taxonArr['unitname1'])) $taxonArr = array_merge(TaxonomyUtilities::parseScientificName($taxonArr['sciname'],$this->conn,$taxonArr['rankid'],$this->kingdomName),$taxonArr);
$translatedTaxonArr = TaxonomyUtilities::parseScientificName($taxonArr['sciname'], $this->conn, $taxonArr['rankid'], $this->kingdomName);
if(!isset($taxonArr['unitname1'])) $taxonArr = array_merge($translatedTaxonArr, $taxonArr);
if(isset($translatedTaxonArr['unitind1']) && $translatedTaxonArr['unitind1']) $taxonArr['unitind1'] = $translatedTaxonArr['unitind1'];
if(isset($translatedTaxonArr['unitind2']) && $translatedTaxonArr['unitind2']) $taxonArr['unitind2'] = $translatedTaxonArr['unitind2'];
}
//$this->buildTaxonArr($taxonArr);
return $taxonArr;
Expand Down Expand Up @@ -1178,6 +1192,17 @@ private function loadNewTaxon($taxonArr, $tidAccepted = 0){
$this->buildTaxonArr($taxonArr);
}
if(!$this->validateTaxonArr($taxonArr)) return false;
if(mb_strpos($taxonArr['sciname'], '×') !== false || mb_strpos($taxonArr['sciname'], '') !== false){
if(mb_strpos($taxonArr['sciname'], '× ') !== false) $taxonArr['sciname'] = str_replace('× ', '×', $taxonArr['sciname']);
if(mb_strpos($taxonArr['sciname'], '') !== false) $taxonArr['sciname'] = str_replace('', '', $taxonArr['sciname']);
if(empty($taxonArr['unitind1'])){
if(mb_strpos($taxonArr['sciname'], '×') === 0) $taxonArr['unitind1'] = '×';
if(mb_strpos($taxonArr['sciname'], '') === 0) $taxonArr['unitind1'] = '';
}
if(empty($taxonArr['unitind2']) && empty($taxonArr['unitind1'])){
if(mb_strpos($taxonArr['sciname'], '×') !== false) $taxonArr['unitind2'] = '×';
}
}
//Check to see sciname is in taxon table, but perhaps not linked to current thesaurus
$sql = 'SELECT tid FROM taxa WHERE (sciname = "'.$this->cleanInStr($taxonArr['sciname']).'") ';
if($this->kingdomName) $sql .= 'AND (kingdomname = "'.$this->kingdomName.'" OR kingdomname = "") ';
Expand Down
Loading

0 comments on commit 0624117

Please sign in to comment.