diff --git a/config/services.sample.yml b/config/services.sample.yml index 044117ab3f..b660b7b24b 100644 --- a/config/services.sample.yml +++ b/config/services.sample.yml @@ -142,6 +142,9 @@ Cache: xcache_cache: type: Cache\XcacheCache + wincache_cache: + type: Cache\WinCacheCache + Border: #Define Border service #The border service handles checks validation constraints against incoming files diff --git a/lib/Alchemy/Phrasea/Cache/WinCacheCache.php b/lib/Alchemy/Phrasea/Cache/WinCacheCache.php new file mode 100644 index 0000000000..ca414e448c --- /dev/null +++ b/lib/Alchemy/Phrasea/Cache/WinCacheCache.php @@ -0,0 +1,71 @@ +contains($key)) { + throw new Exception('Unable to retrieve the value'); + } + + return $this->fetch($key); + } + + /** + * {@inheritdoc} + */ + public function deleteMulti(array $keys) + { + foreach ($keys as $key) { + $this->delete($key); + } + + return $this; + } +} diff --git a/lib/Alchemy/Phrasea/Command/BuildMissingSubdefs.php b/lib/Alchemy/Phrasea/Command/BuildMissingSubdefs.php index d9a1c3b0cb..3ec98cadcb 100644 --- a/lib/Alchemy/Phrasea/Command/BuildMissingSubdefs.php +++ b/lib/Alchemy/Phrasea/Command/BuildMissingSubdefs.php @@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\Command; use Monolog\Handler\StreamHandler; use Alchemy\Phrasea\Command\Command; +use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -64,7 +65,7 @@ class BuildMissingSubdefs extends Command try { $record->get_hd_file(); - } catch (\Exception_Media_SubdefNotFound $e) { + } catch (FileNotFoundException $e) { continue; } diff --git a/lib/Alchemy/Phrasea/Core/Service/Cache/WinCacheCache.php b/lib/Alchemy/Phrasea/Core/Service/Cache/WinCacheCache.php new file mode 100644 index 0000000000..b6cca42354 --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Service/Cache/WinCacheCache.php @@ -0,0 +1,49 @@ +cache) { + $this->cache = new CacheDriver\WinCacheCache(); + + $this->cache->setNamespace(md5(realpath(__DIR__ . '/../../../../../../'))); + } + + return $this->cache; + } + + public function getType() + { + return 'wincache'; + } +} + diff --git a/lib/Alchemy/Phrasea/Media/Subdef/Video.php b/lib/Alchemy/Phrasea/Media/Subdef/Video.php index 3825578eb0..1271bcc1f4 100644 --- a/lib/Alchemy/Phrasea/Media/Subdef/Video.php +++ b/lib/Alchemy/Phrasea/Media/Subdef/Video.php @@ -31,7 +31,7 @@ class Video extends Audio parent::__construct(); $this->registerOption(new OptionType\Range(_('GOP size'), self::OPTION_GOPSIZE, 1, 200, 25)); - $this->registerOption(new OptionType\Range(_('Dimension'), self::OPTION_SIZE, 100, 2000, 600, 16)); + $this->registerOption(new OptionType\Range(_('Dimension'), self::OPTION_SIZE, 64, 2000, 600, 16)); $this->registerOption(new OptionType\Range(_('Frame Rate'), self::OPTION_FRAMERATE, 1, 200, 20)); $this->registerOption(new OptionType\Enum(_('Video Codec'), self::OPTION_VCODEC, array('libx264', 'libvpx', 'libtheora'), 'libx264')); $this->unregisterOption(self::OPTION_ACODEC); @@ -66,4 +66,4 @@ class Video extends Audio return $this->spec; } -} +} \ No newline at end of file diff --git a/lib/classes/ACL.class.php b/lib/classes/ACL.class.php index 723f82d2bd..995e693fed 100644 --- a/lib/classes/ACL.class.php +++ b/lib/classes/ACL.class.php @@ -1381,7 +1381,11 @@ class ACL implements cache_cacheableInterface $this->give_access_to_base(array($base_id_dest)); - $rights = array(); + $rights = array( + 'mask_and' => $row['mask_and'], + 'mask_xor' => $row['mask_xor'], + ); + if ($row['canputinalbum']) $rights['canputinalbum'] = true; if ($row['candwnldhd']) @@ -1415,6 +1419,14 @@ class ACL implements cache_cacheableInterface $this->update_rights_to_base($base_id_dest, $rights); + if ($row['time_limited']) { + $this->set_limits($base_id_dest, $row['time_limited'], new \DateTime($row['limited_from']), new \DateTime($row['limited_to'])); + } + + if ($row['restrict_dwnld']) { + $this->set_quotas_on_base($base_id_dest, $row['month_dwnld_max'], $row['remain_dwnld']); + } + return $this; } diff --git a/lib/classes/searchEngine/adapter/phrasea/queryParser.class.php b/lib/classes/searchEngine/adapter/phrasea/queryParser.class.php index 89783bf158..53445ad0e4 100644 --- a/lib/classes/searchEngine/adapter/phrasea/queryParser.class.php +++ b/lib/classes/searchEngine/adapter/phrasea/queryParser.class.php @@ -114,7 +114,7 @@ class searchEngine_adapter_phrasea_queryParser public function parsequery($phq) { if ($this->debug) { - for ($i = 0; $i < mb_strlen($phq, 'UTF-8'); $i ++ ) { + for ($i = 0; $i < mb_strlen($phq, 'UTF-8'); $i++) { $c = mb_substr($phq, $i, 1, 'UTF-8'); printf("// %s : '%s' (%d octets)\n", $i, $c, strlen($c)); } @@ -351,7 +351,7 @@ class searchEngine_adapter_phrasea_queryParser public function priority_opk(&$tree, $depth = 0) { - if ( ! $tree) { + if (!$tree) { return; } @@ -371,7 +371,7 @@ class searchEngine_adapter_phrasea_queryParser public function distrib_opk(&$tree, $depth = 0) { - if ( ! $tree) { + if (!$tree) { return; } @@ -398,7 +398,7 @@ class searchEngine_adapter_phrasea_queryParser public function thesaurus2_apply(&$tree, $bid) { - if ( ! $tree) { + if (!$tree) { return; } @@ -457,7 +457,7 @@ class searchEngine_adapter_phrasea_queryParser { if ($depth == 0) $ret = $tree; - if ( ! $useThesaurus) { + if (!$useThesaurus) { return; // full-text only : inchangé } @@ -473,7 +473,7 @@ class searchEngine_adapter_phrasea_queryParser if (isset($tree["RB"]["CONTEXT"])) $copy["CONTEXT"] = $tree["CONTEXT"] = $tree["RB"]["CONTEXT"]; else - if ( ! $keepfuzzy) + if (!$keepfuzzy) $copy["CONTEXT"] = $tree["CONTEXT"] = "*"; $copy["RB"]["SREF"] = &$tree["RB"]; @@ -534,7 +534,7 @@ class searchEngine_adapter_phrasea_queryParser if ($context !== null) $tmp["RB"]["CONTEXT"] = $context; else - if ( ! $keepfuzzy) + if (!$keepfuzzy) $tmp["RB"]["CONTEXT"] = "*"; // corrige les profondeurs des 2 copies du 'simple' d'origine $tmp["LB"]["DEPTH"] += 1; @@ -561,7 +561,7 @@ class searchEngine_adapter_phrasea_queryParser if ($context !== null) $tmp["CONTEXT"] = $context; else - if ( ! $keepfuzzy) + if (!$keepfuzzy) $tmp["CONTEXT"] = "*"; // corrige la profondeur de la copie du 'simple' d'origine $tmp["RB"]["DEPTH"] += 1; @@ -581,7 +581,7 @@ class searchEngine_adapter_phrasea_queryParser if ($depth == 0) $this->proposals["BASES"]["b$bid"] = array("BID" => $bid, "NAME" => $name, "TERMS" => array()); - if ( ! $tree) { + if (!$tree) { return(0); } @@ -606,7 +606,7 @@ class searchEngine_adapter_phrasea_queryParser for ($n = $node->firstChild; $n; $n = $n->nextSibling) { if ($n->nodeName == "sy") { $lng = $n->getAttribute("lng"); - if ( ! array_key_exists($lng, $tsy)) + if (!array_key_exists($lng, $tsy)) $tsy[$lng] = array(); $zsy = array("v" => $n->getAttribute("v"), "w" => $n->getAttribute("w"), "k" => $n->getAttribute("k")); @@ -658,7 +658,7 @@ class searchEngine_adapter_phrasea_queryParser } } $n->removeAttribute("marked"); - for ($i = 0; array_key_exists($syfound . $i, $tsort) && $i < 9999; $i ++ ) + for ($i = 0; array_key_exists($syfound . $i, $tsort) && $i < 9999; $i++) ; $tsort[$syfound . $i] = $n; } @@ -731,7 +731,7 @@ class searchEngine_adapter_phrasea_queryParser $t = $w = implode(" ", $w); if (isset($tree["CONTEXT"])) { - if ( ! $tree["CONTEXT"]) { + if (!$tree["CONTEXT"]) { $x0 = "@w=\"" . $w . "\" and not(@k)"; } else { if ($tree["CONTEXT"] == "*") { @@ -753,7 +753,7 @@ class searchEngine_adapter_phrasea_queryParser $dxp = new DOMXPath($domthe); $nodes = $dxp->query($x); - if ( ! isset($tree["RB"]["SREF"]["TIDS"])) + if (!isset($tree["RB"]["SREF"]["TIDS"])) $tree["RB"]["SREF"]["TIDS"] = array(); if ($nodes->length >= 1) { if ($nodes->length == 1) { @@ -764,8 +764,8 @@ class searchEngine_adapter_phrasea_queryParser // on cherche plusieurs id's, on utilisera la syntaxe 'regexp' (l'extension repérera elle meme la syntaxe car la value finira par '$') $val = ""; foreach ($nodes as $node) { - if ( ! isset($tree["CONTEXT"])) - $ambigus ++; + if (!isset($tree["CONTEXT"])) + $ambigus++; $this->addtoTIDS($tree["RB"], $bid, $node); } } @@ -775,74 +775,15 @@ class searchEngine_adapter_phrasea_queryParser $this->proposals["BASES"]["b$bid"]["TERMS"][$path]["HTML"] = $prophtml; } else { // le mot n'est pas dans le thesaurus + $tree = null; } return($ambigus); } - /* - function dead_setTids(&$tree, &$simple, $bid, &$domthe, $searchsynonyms) - { - // if($this->debug) - print("setTids:\n\$tree=" . var_export($tree, true) . "\n"); - - $ambigus = 0; - if(is_array($w = $simple["VALUE"])) - $t = $w = implode(" ", $w); - - if (isset($tree["CONTEXT"])) { - if (!$tree["CONTEXT"]) { - $x0 = "@w=\"" . $w ."\" and not(@k)"; - } else { - if ($tree["CONTEXT"]=="*") { - $x0 = "@w=\"" . $w ."\""; - } else { - $x0 = "@w=\"" . $w ."\" and @k=\"" . $tree["CONTEXT"] . "\""; - $t .= " (" . $tree["CONTEXT"] . ")"; - } - } - } else { - $x0 = "@w=\"" . $w ."\""; - } - - $x = "/thesaurus//sy[" . $x0 ."]"; - - if($this->debug) - printf("searching thesaurus with xpath='%s'
\n", $x); - - $dxp = new DOMXPath($domthe); - $nodes = $dxp->query($x); - - if(!isset($tree["RB"]["SREF"]["TIDS"])) - $tree["RB"]["SREF"]["TIDS"] = array(); - if ($nodes->length >= 1) { - if ($nodes->length == 1) { - // on cherche un id simple, on utilisera la syntaxe sql 'like' (l'extension repérera elle méme la syntaxe car la value finira par '%') - $this->addtoTIDS($tree["RB"], $bid, $nodes->item(0)); - // $this->thesaurusDOMNodes[] = $nodes->item(0); - } else { - // on cherche plusieurs id's, on utilisera la syntaxe 'regexp' (l'extension repérera elle meme la syntaxe car la value finira par '$') - $val = ""; - foreach ($nodes as $node) { - if(!isset($tree["CONTEXT"])) - $ambigus++; - $this->addtoTIDS($tree["RB"], $bid, $node); - } - } - $path = $tree["RB"]["SREF"]["PATH"]; - $prophtml = ""; - $this->propAsHTML($domthe->documentElement, $prophtml, $path); - $this->proposals["TERMS"][$path]["HTML"] = $prophtml; - } else { - // le mot n'est pas dans le thesaurus - } - - return($ambigus); - } - */ public function containsColonOperator(&$tree) { - if ( ! $tree) { + if (!$tree) { return(false); } if ($tree["CLASS"] == "OPK" && $tree["NODETYPE"] == PHRASEA_OP_COLON && ($tree["RB"]["CLASS"] == "SIMPLE" || $tree["RB"]["CLASS"] == "QSIMPLE")) { @@ -870,7 +811,7 @@ class searchEngine_adapter_phrasea_queryParser if ($this->debug) printf("found node id='%s', v='%s' w='%s', k='%s', p='%s' for node-path=%s \n", $id, $DOMnode->getAttribute("v"), $w, $k, $p, $path); - if ( ! $k) + if (!$k) $k = null; $found = false; @@ -889,11 +830,11 @@ class searchEngine_adapter_phrasea_queryParser // } } } - if ( ! $found) + if (!$found) $extendednode["SREF"]["TIDS"][] = array("bid" => $bid, "pid" => $pid, "id" => $id, "w" => $w, "k" => $k, "lng" => $lng, "p" => $p); // on liste les propositions de thésaurus pour ce node (dans l'arbre simple) - if ( ! isset($this->proposals["BASES"]["b$bid"]["TERMS"][$path])) { + if (!isset($this->proposals["BASES"]["b$bid"]["TERMS"][$path])) { // $this->proposals["TERMS"][$path] = array("TERM"=>implode(" ", $extendednode["VALUE"]), "PROPOSALS"=>array()); $term = implode(" ", $extendednode["VALUE"]); if (isset($extendednode["CONTEXT"]) && $extendednode["CONTEXT"]) { @@ -914,7 +855,7 @@ class searchEngine_adapter_phrasea_queryParser // puis par remonter au père for ($node = $DOMnode->parentNode; $node && $node->nodeType == XML_ELEMENT_NODE && $node->parentNode; $node = $node->parentNode) { $id = $node->getAttribute("id"); - if ( ! $id) + if (!$id) break; // on a dépassé la racine du thésaurus $node->setAttribute("marked", "1"); } @@ -937,7 +878,7 @@ class searchEngine_adapter_phrasea_queryParser $txt .= $tab . "\t\"" . $w . ""; $txt .= $tab . "\t\""; $txt .= $tab . "\n"; - $ambiguites["n"] ++; + $ambiguites["n"]++; } else { if (isset($tree["CONTEXT"])) $w .= "[" . $tree["CONTEXT"] . "]"; @@ -972,7 +913,7 @@ class searchEngine_adapter_phrasea_queryParser public function get_ambigu(&$tree, $mouseCallback = "void", $depth = 0) { - if ( ! $tree) { + if (!$tree) { return(""); } @@ -994,22 +935,22 @@ class searchEngine_adapter_phrasea_queryParser public function set_default(&$tree, &$emptyw, $depth = 0) { - if ( ! $tree) { + if (!$tree) { return(true); } if ($tree["CLASS"] == "OPS" || $tree["CLASS"] == "OPK") { if ($tree["CLASS"] == "OPS") { - if ( ! $this->set_default($tree["LB"], $emptyw, $depth + 1)) { + if (!$this->set_default($tree["LB"], $emptyw, $depth + 1)) { return(false); } - if ( ! $this->set_default($tree["RB"], $emptyw, $depth + 1)) { + if (!$this->set_default($tree["RB"], $emptyw, $depth + 1)) { return(false); } } else { // OPK ! // jy 20041223 : ne pas appliquer d'op. par def. derriere un op arith. // ex : "d < 1/2/2003" : grouper la liste "1","2","2004" en "mot" unique - if ( ! $tree["LB"] || ($tree["LB"]["CLASS"] != "SIMPLE" && $tree["LB"]["CLASS"] != "QSIMPLE") || (is_array($tree["LB"]["VALUE"]) && count($tree["LB"]["VALUE"]) != 1)) { + if (!$tree["LB"] || ($tree["LB"]["CLASS"] != "SIMPLE" && $tree["LB"]["CLASS"] != "QSIMPLE") || (is_array($tree["LB"]["VALUE"]) && count($tree["LB"]["VALUE"]) != 1)) { // un op. arith. doit étre précédé d'un seul nom de champ if ($this->errmsg != "") $this->errmsg .= sprintf("\\n"); @@ -1017,7 +958,7 @@ class searchEngine_adapter_phrasea_queryParser return(false); } - if ( ! $tree["RB"] || ($tree["RB"]["CLASS"] != "SIMPLE" && $tree["RB"]["CLASS"] != "QSIMPLE")) { + if (!$tree["RB"] || ($tree["RB"]["CLASS"] != "SIMPLE" && $tree["RB"]["CLASS"] != "QSIMPLE")) { // un op. arith. doit étre suivi d'une valeur if ($this->errmsg != "") $this->errmsg .= sprintf("\\n"); @@ -1036,21 +977,21 @@ class searchEngine_adapter_phrasea_queryParser /** gestion des branches null * a revoir car ca ppete pas d'erreur mais corrige automatiquement * ** */ - if ( ! isset($tree["RB"])) + if (!isset($tree["RB"])) $tree = $tree["LB"]; else - if ( ! isset($tree["LB"])) + if (!isset($tree["LB"])) $tree = $tree["RB"]; } else { if (($tree["CLASS"] == "SIMPLE" || $tree["CLASS"] == "QSIMPLE")) { if (is_array($tree["VALUE"])) { $treetmp = null; $pnum = 0; - for ($i = 0; $i < count($tree["VALUE"]); $i ++ ) { + for ($i = 0; $i < count($tree["VALUE"]); $i++) { // gestion mot vide if (isset($emptyw[$tree["VALUE"][$i]]) || $tree["VALUE"][$i] == "?" || $tree["VALUE"][$i] == "*") { // on a forcé les '?' ou '*' isolés comme des mots vides - $pnum ++; + $pnum++; } else { if ($treetmp == null) { $treetmp = array("CLASS" => $tree["CLASS"], @@ -1109,7 +1050,7 @@ class searchEngine_adapter_phrasea_queryParser unset($tree["LB"]); unset($tree["RB"]); unset($tree["PNUM"]); - $nmodif ++; + $nmodif++; } else { $nmodif += $this->factor_or2($tree["LB"], $depth + 1); $nmodif += $this->factor_or2($tree["RB"], $depth + 1); @@ -1223,7 +1164,7 @@ class searchEngine_adapter_phrasea_queryParser } $tmp = $onedate; - if ( ! is_array($tmp)) + if (!is_array($tmp)) $tmp = explode(" ", $tmp); switch (sizeof($tmp)) { @@ -1477,7 +1418,7 @@ class searchEngine_adapter_phrasea_queryParser if ($inquote) { // quand on est entre guillements les tokens perdent leur signification $tree = $this->addtotree($tree, $t, $depth, $inquote); - if ( ! $tree) { + if (!$tree) { return(null); } } else { @@ -1496,16 +1437,16 @@ class searchEngine_adapter_phrasea_queryParser if ($inquote) { // quand on est entre guillements les tokens perdent leur signification $tree = $this->addtotree($tree, $t, $depth, $inquote); - if ( ! $tree) { + if (!$tree) { return(null); } } else { // '(' : appel récursif - if ( ! $tree) + if (!$tree) $tree = $this->maketree($depth + 1); else { if (($tree["CLASS"] == "OPS" || $tree["CLASS"] == "OPK") && $tree["RB"] == null) { $tree["RB"] = $this->maketree($depth + 1); - if ( ! $tree["RB"]) + if (!$tree["RB"]) $tree = null; } else { // ici on applique l'opérateur par défaut @@ -1518,7 +1459,7 @@ class searchEngine_adapter_phrasea_queryParser "RB" => $this->maketree($depth + 1)); } } - if ( ! $tree) { + if (!$tree) { return(null); } } @@ -1547,12 +1488,12 @@ class searchEngine_adapter_phrasea_queryParser print("OPENING QUOTE!
"); } // ouverture des guillemets -> récursivité - if ( ! $tree) + if (!$tree) $tree = $this->maketree($depth + 1, true); else { if (($tree["CLASS"] == "OPS" || $tree["CLASS"] == "OPK") && $tree["RB"] == null) { $tree["RB"] = $this->maketree($depth + 1, true); - if ( ! $tree["RB"]) + if (!$tree["RB"]) $tree = null; } else { // ici on applique l'opérateur par défaut @@ -1565,7 +1506,7 @@ class searchEngine_adapter_phrasea_queryParser "RB" => $this->maketree($depth + 1, true)); } } - if ( ! $tree) { + if (!$tree) { return(null); } } @@ -1577,7 +1518,7 @@ class searchEngine_adapter_phrasea_queryParser var_dump($tree); print("-------------------------\n"); } - if ( ! $tree) { + if (!$tree) { return(null); } break; @@ -1602,7 +1543,7 @@ class searchEngine_adapter_phrasea_queryParser print("-------------------------\n"); } - if ( ! $t) { + if (!$t) { return($tree); } @@ -1616,7 +1557,7 @@ class searchEngine_adapter_phrasea_queryParser // un [xxx] suit un terme : il introduit un contexte $tree["CONTEXT"] = $t["VALUE"]; } elseif ($tree["CLASS"] == "OPS" || $tree["CLASS"] == "OPK") { - if ( ! isset($tree["RB"]) || ! $tree["RB"]) { + if (!isset($tree["RB"]) || !$tree["RB"]) { // un [xxx] peut suivre un opérateur, c'est un paramétre normalement numérique $tree["PNUM"] = $t["VALUE"]; } else { @@ -1643,7 +1584,7 @@ class searchEngine_adapter_phrasea_queryParser break; case "TOK_CMP": // < > <= >= <> = : sont des opérateurs de comparaison - if ( ! $tree) { + if (!$tree) { // printf("\nUne question ne peut commencer par '" . $t["VALUE"] . "'
"); if ($this->errmsg != "") $this->errmsg .= "\\n"; @@ -1663,9 +1604,9 @@ class searchEngine_adapter_phrasea_queryParser return(array("CLASS" => "OPK", "VALUE" => $t["VALUE"], "NODETYPE" => $this->opk[$t["VALUE"]]["NODETYPE"], "PNUM" => null, "DEPTH" => $depth, "LB" => $tree, "RB" => null)); break; case "TOK_WORD": - if ($t["CLASS"] == "TOK_WORD" && isset($this->ops[$t["VALUE"]]) && ! $inquote) { + if ($t["CLASS"] == "TOK_WORD" && isset($this->ops[$t["VALUE"]]) && !$inquote) { // ce mot est un opérateur phrasea - if ( ! $tree) { + if (!$tree) { // printf("\n581 : Une question ne peut commencer par un opérateur
"); if ($this->errmsg != "") $this->errmsg .= "\\n"; @@ -1698,7 +1639,7 @@ class searchEngine_adapter_phrasea_queryParser // ce mot n'est pas un opérateur $pnum = null; $nodetype = PHRASEA_KEYLIST; - if ($t["CLASS"] == "TOK_WORD" && isset($this->spw[$t["VALUE"]]) && ! $inquote) { + if ($t["CLASS"] == "TOK_WORD" && isset($this->spw[$t["VALUE"]]) && !$inquote) { // mais c'est un mot 'spécial' de phrasea ('last', 'all') $type = $this->spw[$t["VALUE"]]["CLASS"]; $nodetype = $this->spw[$t["VALUE"]]["NODETYPE"]; @@ -1727,7 +1668,7 @@ class searchEngine_adapter_phrasea_queryParser $nok = 0; $w = $t["VALUE"]; if ($w != "?" && $w != "*") { // on laisse passer les 'isolés' pour les traiter plus tard comme des mots vides - for ($i = 0; $i < strlen($w); $i ++ ) { + for ($i = 0; $i < strlen($w); $i++) { $c = substr($w, $i, 1); if ($c == "?" || $c == "*") { if ($nok < $this->app['phraseanet.registry']->get('GV_min_letters_truncation')) { @@ -1739,10 +1680,10 @@ class searchEngine_adapter_phrasea_queryParser } // $nok = 0; } else - $nok ++; + $nok++; } } - if ( ! $tree) { + if (!$tree) { return(array("CLASS" => $type, "NODETYPE" => $nodetype, "VALUE" => array($t["VALUE"]), "PNUM" => $pnum, "DEPTH" => $depth)); } switch ($tree["CLASS"]) { @@ -1927,8 +1868,8 @@ class searchEngine_adapter_phrasea_queryParser $l = mb_strlen($this->phq, 'UTF-8'); $t = ""; $c_utf8 = ""; - for ($i = 0; $i < $l; $i ++ ) { - if ( ! $this->unicode->has_indexer_bad_char(($c_utf8 = mb_substr($this->phq, $i, 1, 'UTF-8')))) { + for ($i = 0; $i < $l; $i++) { + if (!$this->unicode->has_indexer_bad_char(($c_utf8 = mb_substr($this->phq, $i, 1, 'UTF-8')))) { // $c = mb_strtolower($c); // $t .= isset($this->noaccent[$c]) ? $this->noaccent[$c] : $c; $t .= $this->unicode->remove_diacritics(mb_strtolower($c_utf8)); diff --git a/templates/web/common/dialog_export.html.twig b/templates/web/common/dialog_export.html.twig index ddfe4817a7..0e602ec346 100644 --- a/templates/web/common/dialog_export.html.twig +++ b/templates/web/common/dialog_export.html.twig @@ -105,7 +105,7 @@ {% for name, values in download.get_display_download() %} {% if values.available > 0 %} -
+
{% if values.refused|length > 0 %} -