/** * Inserts or updates record in the underlying database * * @param string $nodeName Identifier of server which data comes from (used for harvesting) * @param string $viewGroup Name of the group for viewing (used for CENIA filters) * @param boolean $stopOnError If set true, insert no record if error occurs. Otherwise attempts to insert at least valid elements. * @return array Associative array with update results (both successful and failed records) */ function update($nodeName = '', $editGroup = '', $viewGroup = '', $public = 0, $stopOnError = true, $overwrite = 'all') { $importer = new MetadataImport($this->params['DEBUG']); $md = $importer->xml2array($this->xml, PHPPRG_DIR . "/../xsl/update2micka.xsl"); $c = new MdImport(); $c->setDataType($public); // nastavení veřejného záznamu if ($editGroup) { $c->group_e = $editGroup; } if ($viewGroup) { $c->group_v = $viewGroup; } $c->stop_error = $stopOnError; // pokud dojde k chybě při importu pokračuje $c->server_name = $nodeName; // jméno serveru ze kterého se importuje $c->setReportValidType('array', true); // formát validace $result = $c->dataToMd($md, $overwrite); if ($this->params['DEBUG'] == 1) { var_dump($result); } return $result; }
function importService($url, $service, $user, $group_e, $group_v, $mds, $langs, $lang = 'eng', $public = 0, $updateType = '') { /*--------------------------------------------------------------------- Import metadat ze sluzby $filename nazev xml souboru $service nazev typu sluzby (WMS, WFS, WCS, CSW, ...) podporovano zatim WMS $user prihlaseny uzivatel $group_e skupina pro editaci $$group_v skupina pro prohlizeni $mds standard metadat $langs seznam pouzitych jazyku $lang jazyk zaznamu $public zda bude zaznam verejny ---------------------------------------------------------------------*/ //$mod = 'all'; // mod pro import, all importuje vse, neco jineho preskakuji uuid $id = "1"; // identifikator zaznamu $rs = -1; //----------------------------------------------- $url = trim(htmlspecialchars_decode($url)); if (strpos($langs, $lang) === false) { $langs = $lang . "|" . $langs; } // kontrola, zda je jazyk zaznamu v seznamu pouzitych jazyku if (!strpos(strtolower("." . $url), "http")) { $url = "http://" . $url; } if (!strpos(strtolower($url), "service=")) { if (!strpos($url, "?")) { $url .= "?"; } else { $url .= "&"; } $url .= "SERVICE=" . $service; } if (!strpos(strtolower($url), "getcapabilities")) { $url .= "&REQUEST=GetCapabilities"; } //echo "input url= <a href='$url'>$url</a>"; //TODO potom dat do reportu $xp = new XsltProcessor(); $xml = new DomDocument(); $xsl = new DomDocument(); @($s = file_get_contents($url)); if (!$s) { exit("<br>No data/connection! " . BACKURL); } //TODO QUICK HACK - udleat pres sablony nebo DOM if (strpos($s, 'exception')) { exit("<br><br>Exception: " . $s . " " . BACKURL); } if (!@$xml->loadXML($s)) { exit("<br><br>Not valid service! " . BACKURL); } $xslName = PHPINC_DIR . "/xsl/" . strtolower($service) . ".xsl"; // vyber sablony $md = $this->xml2array($xml, $xslName); if (!$md['MD_Metadata'][0]["language"][0]["LanguageCode"][0]['@']) { $md['MD_Metadata'][0]["language"][0]["LanguageCode"][0]['@'] = $lang; } $url1 = $md["MD_Metadata"][0]["distributionInfo"][0]["MD_Distribution"][0]["transferOptions"][0]["MD_DigitalTransferOptions"][0]["onLine"][0]["CI_OnlineResource"][0]["linkage"][0]["@"]; //var_dump($md); // --- vyhledani duplicitniho zaznamu --- if ($updateType == "all") { require PHPPRG_DIR . '/MdExport.php'; $export = new MdExport($_SESSION['u'], 1, 10, null); $ddata = $export->getdata(array("@linkage = '" . $url1 . "'", "And", "@type = 'service'")); // nalezen záznam if (count($ddata["data"]) > 0) { if (count($ddata["data"]) > 1) { echo 'More records found with this URL.'; foreach ($ddata["data"] as $row) { echo "<br>" . $row['uuid'] . ": " . $row['title']; } echo '<br>The record will be added as new.'; } else { echo "found record: <b>" . $ddata["data"][0]['uuid'] . "</b> " . $ddata["data"][0]['title']; $md['MD_Metadata'][0]["fileIdentifier"][0]['@'] = $ddata["data"][0]['uuid']; } } } // ulozeni dat $c = new MdImport(); $c->setTableMode($this->table_mode); $c->mds = $mds; if ($group_e) { $c->group_e = $group_e; } if ($group_v) { $c->group_v = $group_v; } $c->setDataType($public); // nastavení veřejného záznamu $c->lang = $lang; // pokud není v datech, použije se toto nastavení jazyka //$c->stop_error = true; // pokud dojde k chybě při importu pokračuje $c->stop_error = false; // pokud dojde k chybě při importu pokračuje $rs = $c->dataToMd($md, 'update'); return $rs; }