示例#1
0
 public function getDuplicateCollectorNumber($start)
 {
     $retArr = array();
     $sql = '';
     if ($this->obsUid) {
         $sql = 'SELECT o.occid, o.eventdate, recordedby, o.recordnumber ' . 'FROM omoccurrences o INNER JOIN ' . '(SELECT eventdate, recordnumber FROM omoccurrences GROUP BY eventdate, recordnumber, collid, observeruid ' . 'HAVING Count(*)>1 AND collid = ' . $this->collid . ' AND observeruid = ' . $this->obsUid . ' AND eventdate IS NOT NULL AND recordnumber IS NOT NULL ' . 'AND recordnumber NOT IN("sn","s.n.","Not Provided","unknown")) intab ' . 'ON o.eventdate = intab.eventdate AND o.recordnumber = intab.recordnumber ' . 'WHERE collid = ' . $this->collid . ' AND observeruid = ' . $this->obsUid . ' ';
     } else {
         $sql = 'SELECT o.occid, o.eventdate, recordedby, o.recordnumber ' . 'FROM omoccurrences o INNER JOIN ' . '(SELECT eventdate, recordnumber FROM omoccurrences GROUP BY eventdate, recordnumber, collid ' . 'HAVING Count(*)>1 AND collid = ' . $this->collid . ' AND eventdate IS NOT NULL AND recordnumber IS NOT NULL ' . 'AND recordnumber NOT IN("sn","s.n.","Not Provided","unknown")) intab ' . 'ON o.eventdate = intab.eventdate AND o.recordnumber = intab.recordnumber ' . 'WHERE collid = ' . $this->collid . ' ';
     }
     //echo $sql;
     $rs = $this->conn->query($sql);
     $collArr = array();
     while ($r = $rs->fetch_object()) {
         $nameArr = Agent::parseLeadingNameInList($r->recordedby);
         if (isset($nameArr['last']) && $nameArr['last'] && strlen($nameArr['last']) > 2) {
             $lastName = $nameArr['last'];
             $collArr[$r->eventdate][$r->recordnumber][$lastName][] = $r->occid;
         }
     }
     $rs->free();
     //Collection duplicate clusters
     $occidArr = array();
     $cnt = 0;
     foreach ($collArr as $ed => $arr1) {
         foreach ($arr1 as $rn => $arr2) {
             foreach ($arr2 as $ln => $dupArr) {
                 if (count($dupArr) > 1) {
                     //Skip records until start is reached
                     if ($cnt >= $start) {
                         $sql = 'SELECT ' . $cnt . ' AS dupid, o.occid, o.catalognumber, o.othercatalognumbers, o.othercatalognumbers, o.family, o.sciname, o.recordedby, o.recordnumber, ' . 'o.associatedcollectors, o.eventdate, o.verbatimeventdate, o.country, o.stateprovince, o.county, o.municipality, o.locality, datelastmodified ' . 'FROM omoccurrences o ' . 'WHERE occid IN(' . implode(',', $dupArr) . ') ';
                         //echo $sql;
                         $retArr = array_merge($retArr, $this->getDuplicates($sql));
                     }
                     if ($cnt > $start + 200) {
                         break 3;
                     }
                     $cnt++;
                 }
             }
         }
     }
     return $retArr;
 }
示例#2
0
 /** Given a name, construct an agent object of the appropriate type.
  * 
  * @param name the name of the agent to construct.
  * @return an agent object or null;
  */
 public function constructAgentDetType($name)
 {
     $result = null;
     if (preg_match("/([|;&]| and )/", $name)) {
         // agent is a composite of more than one agent
         $result = constructNewAgent('Team', '', '', '', $name);
     } else {
         if (preg_match("/([Ee]xpedition|Exped.|[Cc]onsortium|Bureau of|[Ss]ociety|[Cc]ommission)/", $name)) {
             $result = constructNewAgent('Organization', '', '', '', $name);
         } else {
             $namebits = Agent::parseLeadingNameInList($name);
             $result = constructNewAgent('Individual', $namebits['first'], $namebits['middle'], $namebits['last'], '');
             $result->setnotes($name);
         }
     }
     return $result;
 }