Exemplo n.º 1
0
*
* Author: David B. Lowery
*/
include_once '../../../config/symbini.php';
include_once 'fp/FPNetworkFactory.php';
include_once 'fp/common/AnnotationGenerator.php';
// check that the client helper has been installed
$file = 'fp/FPNetworkFactory.php';
$includePaths = explode(PATH_SEPARATOR, get_include_path());
$fileExists = false;
foreach ($includePaths as $p) {
    $fullname = $p . DIRECTORY_SEPARATOR . $file;
    if (is_file($fullname)) {
        $fileExists = true;
        break;
    }
}
if (!$fileExists) {
    echo "FilteredPush Support has been enabled in this Symbiota installation, but FilteredPush helper code is not installed.<BR>";
    echo "<strong>{$file} not found.</strong>";
} else {
    // Check for required query params
    if (array_key_exists('catalognumber', $_GET) && (array_key_exists('collectioncode', $_GET) || array_key_exists('institutioncode', $_GET))) {
        $endpoint = FPNetworkFactory::getSparqlEndpoint();
        // returns query result formatted as html
        $results = $endpoint->getAnnotations($_GET);
        echo $results;
    } else {
        throw new Exception("catalognumber and either collectioncode or institutioncode required for \"Annotations\" tab view.");
    }
}
 public function addDetermination($detArr, $isEditor)
 {
     $status = "Determination submitted successfully!";
     if (!$this->occid) {
         return 'ERROR: occid is null';
     }
     $isCurrent = 0;
     if (!array_key_exists('makecurrent', $detArr)) {
         $detArr['makecurrent'] = 0;
     }
     if (!array_key_exists('printqueue', $detArr)) {
         $detArr['printqueue'] = 0;
     }
     if ($detArr['makecurrent'] == 1 && $isEditor < 3) {
         $isCurrent = 1;
     }
     if ($isEditor == 3) {
         $status = "Determination has been added successfully, but is pending approval before being activated";
     }
     $sortSeq = 1;
     if (preg_match('/([1,2]{1}\\d{3})/', $detArr['dateidentified'], $matches)) {
         $sortSeq = 2100 - $matches[1];
     }
     if ($isCurrent) {
         //Set all dets for this specimen to not current
         $sqlSetCur1 = 'UPDATE omoccurdeterminations SET iscurrent = 0 WHERE appliedstatus = 1 AND occid = ' . $this->occid;
         if (!$this->conn->query($sqlSetCur1)) {
             $status = 'ERROR resetting dets to not current: ' . $this->conn->error;
             //$status .= '; '.$sqlSetCur1;
         }
     }
     //Load new determination into omoccurdeterminations
     $sciname = $this->cleanInStr($detArr['sciname']);
     $notes = $this->cleanInStr($detArr['identificationremarks']);
     if ($isEditor == 3 && is_numeric($detArr['confidenceranking'])) {
         $notes .= ($notes ? '; ' : '') . 'ConfidenceRanking: ' . $detArr['confidenceranking'];
     }
     $sql = 'INSERT INTO omoccurdeterminations(occid, identifiedBy, dateIdentified, sciname, scientificNameAuthorship, ' . 'identificationQualifier, iscurrent, printqueue, appliedStatus, identificationReferences, identificationRemarks, sortsequence) ' . 'VALUES (' . $this->occid . ',"' . $this->cleanInStr($detArr['identifiedby']) . '","' . $this->cleanInStr($detArr['dateidentified']) . '","' . $sciname . '",' . ($detArr['scientificnameauthorship'] ? '"' . $this->cleanInStr($detArr['scientificnameauthorship']) . '"' : 'NULL') . ',' . ($detArr['identificationqualifier'] ? '"' . $this->cleanInStr($detArr['identificationqualifier']) . '"' : 'NULL') . ',' . $detArr['makecurrent'] . ',' . $detArr['printqueue'] . ',' . ($isEditor == 3 ? 0 : 1) . ',' . ($detArr['identificationreferences'] ? '"' . $this->cleanInStr($detArr['identificationreferences']) . '"' : 'NULL') . ',' . ($notes ? '"' . $notes . '"' : 'NULL') . ',' . $sortSeq . ')';
     //echo "<div>".$sql."</div>";
     if ($this->conn->query($sql)) {
         //Create and insert Symbiota GUID for determination(UUID)
         $guid = UuidFactory::getUuidV4();
         $detId = $this->conn->insert_id;
         if (!$this->conn->query('INSERT INTO guidoccurdeterminations(guid,detid) VALUES("' . $guid . '",' . $detId . ')')) {
             $status .= ' (Warning: Symbiota GUID mapping #1 failed)';
         }
         //If is current, move old determination from omoccurrences to omoccurdeterminations and then load new record into omoccurrences
         if ($isCurrent) {
             //If determination is already in omoccurdeterminations, INSERT will fail move omoccurrences determination to  table
             $sqlInsert = 'INSERT INTO omoccurdeterminations(occid, identifiedBy, dateIdentified, sciname, scientificNameAuthorship, ' . 'identificationQualifier, identificationReferences, identificationRemarks, sortsequence) ' . 'SELECT occid, IFNULL(identifiedby,"unknown") AS idby, IFNULL(dateidentified,"unknown") AS di, ' . 'sciname, scientificnameauthorship, identificationqualifier, identificationreferences, identificationremarks, 10 AS sortseq ' . 'FROM omoccurrences WHERE (occid = ' . $this->occid . ')';
             //echo "<div>".$sqlInsert."</div>";
             if ($this->conn->query($sqlInsert)) {
                 //Create and insert Symbiota GUID for determination(UUID)
                 $guid = UuidFactory::getUuidV4();
                 $detId = $this->conn->insert_id;
                 if (!$this->conn->query('INSERT INTO guidoccurdeterminations(guid,detid) VALUES("' . $guid . '",' . $detId . ')')) {
                     $status .= ' (Warning: Symbiota GUID mapping #2 failed)';
                 }
             }
             $tidToAdd = $detArr['tidtoadd'];
             if ($tidToAdd && !is_numeric($tidToAdd)) {
                 $tidToAdd = 0;
             }
             //Check to see if taxon has a locality security protection (rare, threatened, or sensitive species)
             $sStatus = 0;
             if ($tidToAdd) {
                 $sqlSs = 'SELECT securitystatus FROM taxa WHERE (tid = ' . $tidToAdd . ')';
                 $rsSs = $this->conn->query($sqlSs);
                 if ($rSs = $rsSs->fetch_object()) {
                     if ($rSs->securitystatus == 1) {
                         $sStatus = 1;
                     }
                 }
                 $rsSs->free();
                 if (!$sStatus) {
                     $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 = ' . $tidToAdd . ') AND (o.occid = ' . $this->occid . ')';
                     //echo $sql; exit;
                     $rsSs2 = $this->conn->query($sql2);
                     if ($rsSs2->num_rows) {
                         $sStatus = 1;
                     }
                     $rsSs2->free();
                 }
             }
             //Load new determination into omoccurrences table
             $sqlNewDet = 'UPDATE omoccurrences ' . 'SET identifiedBy = "' . $this->cleanInStr($detArr['identifiedby']) . '", dateIdentified = "' . $this->cleanInStr($detArr['dateidentified']) . '",' . 'family = ' . ($detArr['family'] ? '"' . $this->cleanInStr($detArr['family']) . '"' : 'NULL') . ',' . 'sciname = "' . $sciname . '",genus = NULL, specificEpithet = NULL, taxonRank = NULL, infraspecificepithet = NULL,' . 'scientificNameAuthorship = ' . ($detArr['scientificnameauthorship'] ? '"' . $this->cleanInStr($detArr['scientificnameauthorship']) . '"' : 'NULL') . ',' . 'identificationQualifier = ' . ($detArr['identificationqualifier'] ? '"' . $this->cleanInStr($detArr['identificationqualifier']) . '"' : 'NULL') . ',' . 'identificationReferences = ' . ($detArr['identificationreferences'] ? '"' . $this->cleanInStr($detArr['identificationreferences']) . '"' : 'NULL') . ',' . 'identificationRemarks = ' . ($detArr['identificationremarks'] ? '"' . $this->cleanInStr($detArr['identificationremarks']) . '"' : 'NULL') . ', ' . 'tidinterpreted = ' . ($tidToAdd ? $tidToAdd : 'NULL') . ', localitysecurity = ' . $sStatus . ' WHERE (occid = ' . $this->occid . ')';
             //echo "<div>".$sqlNewDet."</div>";
             $this->conn->query($sqlNewDet);
             //Add identification confidence
             if (isset($detArr['confidenceranking'])) {
                 $idStatus = $this->editIdentificationRanking($detArr['confidenceranking'], '');
                 if ($idStatus) {
                     $status .= '; ' . $idStatus;
                 }
             }
             //Remap images
             $sql = 'UPDATE images SET tid = ' . ($tidToAdd ? $tidToAdd : 'NULL') . ' WHERE (occid = ' . $this->occid . ')';
             //echo $sql;
             if (!$this->conn->query($sql)) {
                 $status = 'ERROR: Annotation added but failed to remap images to new name';
                 $status .= ': ' . $this->conn->error;
             }
         }
         //FP code
         global $fpEnabled;
         if (isset($fpEnabled) && $fpEnabled && isset($detArr['fpsubmit']) && $detArr['fpsubmit']) {
             $status = "Determination added successfully and submitted to Filtered Push!";
             try {
                 // create an array that the annotation generator can understand from $detArr
                 $annotation = fpNewDetArr($detArr);
                 // generate rdf/xml
                 $generator = FPNetworkFactory::getAnnotationGenerator();
                 $rdf = $generator->generateRdfXml($annotation);
                 // inject annotation into fp
                 $network = FPNetworkFactory::getNetworkFacade();
                 $response = $network->injectIntoFP($rdf);
             } catch (Exception $e) {
                 error_log($e->getFile() . '(' . $e->getLine() . '): ' . $e->getMessage());
                 $status = "Determination added successfully but there was an error during submission to Filtered Push!";
             }
         }
     } else {
         $status = 'ERROR - failed to add determination: ' . $this->conn->error;
     }
     return $status;
 }
Exemplo n.º 3
0
            Annotator Name: <input type="text" size="20" name="annotator_name"/><br/>
            Annotator Email: <input type="text" size="20" name="annotator_email"/><br/>
            <input type="radio" name="polarity" value="positive"/> Agree <input type="radio" name="polarity"
                                                                                value="neutral"/> Neutral <input
                type="radio" name="polarity" value="negative"/> Disagree<br/>
            Opinion Text: <input type="text" size="40" name="opinionText"/><br/>
            Evidence: <br/>
            <textarea name="evidence" rows="10" cols="35"></textarea><br/>
            <input type="hidden" name="annotationURI" value="<?php 
        echo $_GET['uri'];
        ?>
"/>
            <input type="submit" value="Respond"/>
        </form>
    <?php 
    } else {
        if ($_SERVER['REQUEST_METHOD'] == "POST") {
            $fp = FPNetworkFactory::getNetworkFacade();
            $annotation = array();
            $annotation['target'] = array("annotationUri" => $_POST['annotationURI']);
            $annotation['body'] = array("polarity" => array("name" => $_POST['polarity']), "describesObject" => array("annotationUri" => $_POST['annotationURI']), "opinionText" => $_POST['opinionText']);
            $annotation['annotator_name'] = $_POST['annotator_name'];
            $annotation['annotator_email'] = $_POST['annotator_email'];
            $annotation['evidence'] = array("chars" => $_POST['evidence']);
            echo $fp->respond(AnnotationGenerator::responseAnnotation($annotation));
            echo "<script type='text/javascript'>";
            echo "window.close();";
            echo "</script>";
        }
    }
}