Exemple #1
0
 private function fixThesaurus2(&$domth, &$tenode, $depth, \unicode $unicode)
 {
     $sy = $tenode->appendChild($domth->createElement("sy"));
     $sy->setAttribute("lng", $v = $tenode->getAttribute("lng"));
     $sy->setAttribute("v", $v = $tenode->getAttribute("v"));
     $sy->setAttribute("w", $unicode->remove_indexer_chars($v));
     if (($k = $tenode->getAttribute("k")) != "") {
         $sy->setAttribute("k", $k);
     }
     $tenode->removeAttribute("lng");
     $tenode->removeAttribute("v");
     $tenode->removeAttribute("w");
     $tenode->removeAttribute("k");
     if ($tenode->getAttribute("nextid") == "") {
         $tenode->setAttribute("nextid", "0");
     }
     $todel = [];
     for ($n = $tenode->firstChild; $n; $n = $n->nextSibling) {
         if ($n->nodeName == "ta") {
             $todel[] = $n;
         }
         if ($n->nodeName == "te") {
             $this->fixThesaurus2($domth, $n, $depth + 1, $unicode);
         }
     }
     foreach ($todel as $n) {
         $n->parentNode->removeChild($n);
     }
 }
Exemple #2
0
 public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode)
 {
     $needreindex = false;
     if ($version == "2.0.4") {
         $xp = new DOMXPath($domth);
         $sy = $xp->query("//sy");
         for ($i = 0; $i < $sy->length; $i++) {
             if ($k = $sy->item($i)->getAttribute("k")) {
                 $v = $sy->item($i)->getAttribute("v");
                 if (strpos($v, "(") === false) {
                     $sy->item($i)->setAttribute("v", $v . " (" . $k . ")");
                     printf("//  context '({$k})' pasted to value '{$v}'\n");
                     $needreindex = true;
                 } else {
                     printf("//  <font color=\"#ff8000\">warning</font> : &lt;sy id='%s' v='%s' ...&gt; already had context (left unchanged)\n", $sy->item($i)->getAttribute("id"), htmlentities($v));
                 }
                 $newk = trim($unicode->remove_indexer_chars($k));
                 if ($newk != $k) {
                     $sy->item($i)->setAttribute("k", $newk);
                     $needreindex = true;
                 }
             }
         }
         $domth->documentElement->setAttribute("version", "2.0.5");
         $domth->documentElement->setAttribute("modification_date", date("YmdHis"));
         if ($needreindex) {
             print "//   need to reindex, deleting cterms (keeping rejected)\n";
             $xp = new DOMXPath($domct);
             $nodes = $xp->query("//te[not(starts-with(@id, 'R')) and count(te[starts-with(@id, 'R')])=0]");
             $nodestodel = [];
             for ($i = 0; $i < $nodes->length; $i++) {
                 $nodestodel[] = $nodes->item($i);
             }
             $ctdel = 0;
             foreach ($nodestodel as $node) {
                 $sql2 = "DELETE FROM thit WHERE value LIKE :like";
                 $stmt = $connbas->prepare($sql2);
                 $stmt->execute([':like' => str_replace(".", "d", $node->getAttribute("id")) . "d%"]);
                 $stmt->closeCursor();
                 $node->parentNode->removeChild($node);
                 $ctdel++;
             }
             print "//     {$ctdel} nodes removed\n";
             $sql2 = "UPDATE record SET status=((status | 15) & ~2)";
             $stmt = $connbas->prepare($sql2);
             $stmt->execute();
             $stmt->closeCursor();
         }
         $sy = $xp->query("//sy");
         for ($i = 0; $i < $sy->length; $i++) {
             if ($k = $sy->item($i)->getAttribute("k")) {
                 if (strpos($v = $sy->item($i)->getAttribute("v"), "(") === false) {
                     $sy->item($i)->setAttribute("v", $v . " (" . $k . ")");
                 } else {
                     printf("//   <font color=\"#ff8000\">warning</font> : &lt;sy id='%s' v='%s' ...&gt already had context (left unchanged)\n", $sy->item($i)->getAttribute("id"), htmlentities($v));
                 }
                 $sy->item($i)->setAttribute("k", $unicode->remove_indexer_chars($k));
             }
         }
         $domct->documentElement->removeAttribute("id");
         $this->fixRejected($connbas, $domct->documentElement, false);
         $this->fixIds($connbas, $domct->documentElement);
         $domct->documentElement->setAttribute("version", "2.0.5");
         $domct->documentElement->setAttribute("modification_date", date("YmdHis"));
         $version = "2.0.5";
     }
     return $version;
 }