@@ -36,30 +36,30 @@ |
||
| 36 | 36 | // http://doc.spip.org/@phraserTout |
| 37 | 37 | function phraserTout($phraseur, $data) |
| 38 | 38 | { |
| 39 | - xml_parsestring($this, $data); |
|
| 39 | + xml_parsestring($this, $data); |
|
| 40 | 40 | } |
| 41 | 41 | |
| 42 | - var $depth = ""; |
|
| 43 | - var $res = ""; |
|
| 44 | - var $err = array(); |
|
| 45 | - var $contenu = array(); |
|
| 46 | - var $ouvrant = array(); |
|
| 47 | - var $reperes = array(); |
|
| 48 | - var $entete = ''; |
|
| 49 | - var $page = ''; |
|
| 50 | - var $dtc = NULL; |
|
| 51 | - var $sax = NULL; |
|
| 42 | + var $depth = ""; |
|
| 43 | + var $res = ""; |
|
| 44 | + var $err = array(); |
|
| 45 | + var $contenu = array(); |
|
| 46 | + var $ouvrant = array(); |
|
| 47 | + var $reperes = array(); |
|
| 48 | + var $entete = ''; |
|
| 49 | + var $page = ''; |
|
| 50 | + var $dtc = NULL; |
|
| 51 | + var $sax = NULL; |
|
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | // http://doc.spip.org/@xml_indenter_dist |
| 55 | 55 | function xml_indenter_dist($page, $apply=false) |
| 56 | 56 | { |
| 57 | - $sax = charger_fonction('sax', 'xml'); |
|
| 58 | - $f = new IndenteurXML(); |
|
| 59 | - $sax($page, $apply, $f); |
|
| 60 | - if (!$f->err) return $f->entete . $f->res; |
|
| 61 | - spip_log("indentation impossible " . count($f->err) . " erreurs de validation"); |
|
| 62 | - return $f->entete . $f->page; |
|
| 57 | + $sax = charger_fonction('sax', 'xml'); |
|
| 58 | + $f = new IndenteurXML(); |
|
| 59 | + $sax($page, $apply, $f); |
|
| 60 | + if (!$f->err) return $f->entete . $f->res; |
|
| 61 | + spip_log("indentation impossible " . count($f->err) . " erreurs de validation"); |
|
| 62 | + return $f->entete . $f->page; |
|
| 63 | 63 | } |
| 64 | 64 | |
| 65 | 65 | ?> |
@@ -21,207 +21,207 @@ discard block |
||
| 21 | 21 | * @return string |
| 22 | 22 | */ |
| 23 | 23 | function xml_entites_html($texte){ |
| 24 | - if (!is_string($texte) OR !$texte |
|
| 25 | - OR strpbrk($texte, "&\"'<>")==false |
|
| 26 | - ) return $texte; |
|
| 27 | - |
|
| 28 | - if (!function_exists('spip_htmlspecialchars')) |
|
| 29 | - include_spip("inc/filtres_mini"); |
|
| 30 | - $texte = spip_htmlspecialchars($texte,ENT_QUOTES); |
|
| 31 | - return $texte; |
|
| 24 | + if (!is_string($texte) OR !$texte |
|
| 25 | + OR strpbrk($texte, "&\"'<>")==false |
|
| 26 | + ) return $texte; |
|
| 27 | + |
|
| 28 | + if (!function_exists('spip_htmlspecialchars')) |
|
| 29 | + include_spip("inc/filtres_mini"); |
|
| 30 | + $texte = spip_htmlspecialchars($texte,ENT_QUOTES); |
|
| 31 | + return $texte; |
|
| 32 | 32 | } |
| 33 | 33 | |
| 34 | 34 | // http://doc.spip.org/@xml_debutElement |
| 35 | 35 | function xml_debutElement($phraseur, $name, $attrs) |
| 36 | 36 | { |
| 37 | - $depth = $phraseur->depth; |
|
| 38 | - |
|
| 39 | - $t = isset($phraseur->ouvrant[$depth]) ? $phraseur->ouvrant[$depth] : ' '; |
|
| 40 | - // espace initial signifie: deja integree au resultat |
|
| 41 | - if ($t[0] != ' ') |
|
| 42 | - { |
|
| 43 | - $phraseur->res .= '<' . $t . '>'; |
|
| 44 | - $phraseur->ouvrant[$depth] = ' ' . $t; |
|
| 45 | - } |
|
| 46 | - $t = $phraseur->contenu[$depth]; |
|
| 47 | - // n'indenter que s'il y a un separateur avant |
|
| 48 | - $phraseur->res .= preg_replace("/[\n\t ]+$/", "\n$depth", $t); |
|
| 49 | - $phraseur->contenu[$depth] = ""; |
|
| 50 | - $att = ''; |
|
| 51 | - $sep = ' '; |
|
| 52 | - foreach ($attrs as $k => $v) { |
|
| 53 | - $delim = strpos($v, "'") === false ? "'" : '"'; |
|
| 54 | - $val = xml_entites_html($v); |
|
| 55 | - $att .= $sep . $k . "=" . $delim |
|
| 56 | - . ($delim !== '"' ? str_replace('"', '"', $val) : $val) |
|
| 57 | - . $delim; |
|
| 58 | - $sep = "\n $depth"; |
|
| 59 | - } |
|
| 60 | - $phraseur->depth .= ' '; |
|
| 61 | - $phraseur->contenu[$phraseur->depth] = ""; |
|
| 62 | - $phraseur->ouvrant[$phraseur->depth] = $name . $att; |
|
| 63 | - $phraseur->reperes[$phraseur->depth] = xml_get_current_line_number($phraseur->sax); |
|
| 37 | + $depth = $phraseur->depth; |
|
| 38 | + |
|
| 39 | + $t = isset($phraseur->ouvrant[$depth]) ? $phraseur->ouvrant[$depth] : ' '; |
|
| 40 | + // espace initial signifie: deja integree au resultat |
|
| 41 | + if ($t[0] != ' ') |
|
| 42 | + { |
|
| 43 | + $phraseur->res .= '<' . $t . '>'; |
|
| 44 | + $phraseur->ouvrant[$depth] = ' ' . $t; |
|
| 45 | + } |
|
| 46 | + $t = $phraseur->contenu[$depth]; |
|
| 47 | + // n'indenter que s'il y a un separateur avant |
|
| 48 | + $phraseur->res .= preg_replace("/[\n\t ]+$/", "\n$depth", $t); |
|
| 49 | + $phraseur->contenu[$depth] = ""; |
|
| 50 | + $att = ''; |
|
| 51 | + $sep = ' '; |
|
| 52 | + foreach ($attrs as $k => $v) { |
|
| 53 | + $delim = strpos($v, "'") === false ? "'" : '"'; |
|
| 54 | + $val = xml_entites_html($v); |
|
| 55 | + $att .= $sep . $k . "=" . $delim |
|
| 56 | + . ($delim !== '"' ? str_replace('"', '"', $val) : $val) |
|
| 57 | + . $delim; |
|
| 58 | + $sep = "\n $depth"; |
|
| 59 | + } |
|
| 60 | + $phraseur->depth .= ' '; |
|
| 61 | + $phraseur->contenu[$phraseur->depth] = ""; |
|
| 62 | + $phraseur->ouvrant[$phraseur->depth] = $name . $att; |
|
| 63 | + $phraseur->reperes[$phraseur->depth] = xml_get_current_line_number($phraseur->sax); |
|
| 64 | 64 | } |
| 65 | 65 | |
| 66 | 66 | // http://doc.spip.org/@xml_finElement |
| 67 | 67 | function xml_finElement($phraseur, $name, $fusion_bal=false) |
| 68 | 68 | { |
| 69 | - $ouv = $phraseur->ouvrant[$phraseur->depth]; |
|
| 70 | - |
|
| 71 | - if ($ouv[0] != ' ') |
|
| 72 | - $phraseur->ouvrant[$phraseur->depth] = ' ' . $ouv; |
|
| 73 | - else $ouv= ""; |
|
| 74 | - $t = $phraseur->contenu[$phraseur->depth]; |
|
| 75 | - $phraseur->depth = substr($phraseur->depth, 2); |
|
| 76 | - $t = preg_replace("/[\n\t ]+$/", "\n" . $phraseur->depth, $t); |
|
| 77 | - |
|
| 78 | - // fusion <balise></balise> en <balise />. |
|
| 79 | - // ATTENTION, certains clients http croient que fusion ==> pas d'atttributs |
|
| 80 | - // en particulier pour les balises Script et A. |
|
| 81 | - // en presence d'attributs ne le faire que si la DTD est dispo et d'accord |
|
| 82 | - // (param fusion_bal) |
|
| 83 | - |
|
| 84 | - if ($t || (($ouv != $name) AND !$fusion_bal)) |
|
| 85 | - $phraseur->res .= ($ouv ? ('<' . $ouv . '>') : '') . $t . "</" . $name . ">"; |
|
| 86 | - else |
|
| 87 | - $phraseur->res .= ($ouv ? ('<' . $ouv . ' />') : ("</" . $name . ">")); |
|
| 69 | + $ouv = $phraseur->ouvrant[$phraseur->depth]; |
|
| 70 | + |
|
| 71 | + if ($ouv[0] != ' ') |
|
| 72 | + $phraseur->ouvrant[$phraseur->depth] = ' ' . $ouv; |
|
| 73 | + else $ouv= ""; |
|
| 74 | + $t = $phraseur->contenu[$phraseur->depth]; |
|
| 75 | + $phraseur->depth = substr($phraseur->depth, 2); |
|
| 76 | + $t = preg_replace("/[\n\t ]+$/", "\n" . $phraseur->depth, $t); |
|
| 77 | + |
|
| 78 | + // fusion <balise></balise> en <balise />. |
|
| 79 | + // ATTENTION, certains clients http croient que fusion ==> pas d'atttributs |
|
| 80 | + // en particulier pour les balises Script et A. |
|
| 81 | + // en presence d'attributs ne le faire que si la DTD est dispo et d'accord |
|
| 82 | + // (param fusion_bal) |
|
| 83 | + |
|
| 84 | + if ($t || (($ouv != $name) AND !$fusion_bal)) |
|
| 85 | + $phraseur->res .= ($ouv ? ('<' . $ouv . '>') : '') . $t . "</" . $name . ">"; |
|
| 86 | + else |
|
| 87 | + $phraseur->res .= ($ouv ? ('<' . $ouv . ' />') : ("</" . $name . ">")); |
|
| 88 | 88 | } |
| 89 | 89 | |
| 90 | 90 | // http://doc.spip.org/@xml_textElement |
| 91 | 91 | function xml_textElement($phraseur, $data) |
| 92 | 92 | { |
| 93 | - $depth = $phraseur->depth; |
|
| 94 | - $phraseur->contenu[$depth] .= preg_match('/^script/',$phraseur->ouvrant[$depth]) |
|
| 95 | - ? $data |
|
| 96 | - : xml_entites_html($data); |
|
| 93 | + $depth = $phraseur->depth; |
|
| 94 | + $phraseur->contenu[$depth] .= preg_match('/^script/',$phraseur->ouvrant[$depth]) |
|
| 95 | + ? $data |
|
| 96 | + : xml_entites_html($data); |
|
| 97 | 97 | } |
| 98 | 98 | |
| 99 | 99 | function xml_piElement($phraseur, $target, $data) |
| 100 | 100 | { |
| 101 | - $depth = $phraseur->depth; |
|
| 102 | - |
|
| 103 | - if (strtolower($target) != "php") |
|
| 104 | - $phraseur->contenu[$depth] .= $data; |
|
| 105 | - else { |
|
| 106 | - ob_start(); |
|
| 107 | - eval($data); |
|
| 108 | - $data = ob_get_contents(); |
|
| 109 | - ob_end_clean(); |
|
| 110 | - $phraseur->contenu[$depth] .= $data; |
|
| 111 | - } |
|
| 101 | + $depth = $phraseur->depth; |
|
| 102 | + |
|
| 103 | + if (strtolower($target) != "php") |
|
| 104 | + $phraseur->contenu[$depth] .= $data; |
|
| 105 | + else { |
|
| 106 | + ob_start(); |
|
| 107 | + eval($data); |
|
| 108 | + $data = ob_get_contents(); |
|
| 109 | + ob_end_clean(); |
|
| 110 | + $phraseur->contenu[$depth] .= $data; |
|
| 111 | + } |
|
| 112 | 112 | } |
| 113 | 113 | |
| 114 | 114 | |
| 115 | 115 | // http://doc.spip.org/@xml_defautElement |
| 116 | 116 | function xml_defaultElement($phraseur, $data) |
| 117 | 117 | { |
| 118 | - $depth = $phraseur->depth; |
|
| 118 | + $depth = $phraseur->depth; |
|
| 119 | 119 | |
| 120 | - if (!isset($phraseur->contenu[$depth])) $phraseur->contenu[$depth]=''; |
|
| 121 | - $phraseur->contenu[$depth] .= $data; |
|
| 120 | + if (!isset($phraseur->contenu[$depth])) $phraseur->contenu[$depth]=''; |
|
| 121 | + $phraseur->contenu[$depth] .= $data; |
|
| 122 | 122 | } |
| 123 | 123 | |
| 124 | 124 | // http://doc.spip.org/@xml_parsestring |
| 125 | 125 | function xml_parsestring($phraseur, $data) |
| 126 | 126 | { |
| 127 | - $phraseur->contenu[$phraseur->depth] =''; |
|
| 128 | - |
|
| 129 | - if (!xml_parse($phraseur->sax, $data, true)) { |
|
| 130 | - coordonnees_erreur($phraseur, |
|
| 131 | - xml_error_string(xml_get_error_code($phraseur->sax)) |
|
| 132 | - . "<br />\n" . |
|
| 133 | - (!$phraseur->depth ? '' : |
|
| 134 | - ('(' . |
|
| 135 | - _T('erreur_balise_non_fermee') . |
|
| 136 | - " <tt>" . |
|
| 137 | - $phraseur->ouvrant[$phraseur->depth] . |
|
| 138 | - "</tt> " . |
|
| 139 | - _T('ligne') . |
|
| 140 | - " " . |
|
| 141 | - $phraseur->reperes[$phraseur->depth] . |
|
| 142 | - ") <br />\n" ))); |
|
| 143 | - } |
|
| 127 | + $phraseur->contenu[$phraseur->depth] =''; |
|
| 128 | + |
|
| 129 | + if (!xml_parse($phraseur->sax, $data, true)) { |
|
| 130 | + coordonnees_erreur($phraseur, |
|
| 131 | + xml_error_string(xml_get_error_code($phraseur->sax)) |
|
| 132 | + . "<br />\n" . |
|
| 133 | + (!$phraseur->depth ? '' : |
|
| 134 | + ('(' . |
|
| 135 | + _T('erreur_balise_non_fermee') . |
|
| 136 | + " <tt>" . |
|
| 137 | + $phraseur->ouvrant[$phraseur->depth] . |
|
| 138 | + "</tt> " . |
|
| 139 | + _T('ligne') . |
|
| 140 | + " " . |
|
| 141 | + $phraseur->reperes[$phraseur->depth] . |
|
| 142 | + ") <br />\n" ))); |
|
| 143 | + } |
|
| 144 | 144 | } |
| 145 | 145 | |
| 146 | 146 | // http://doc.spip.org/@coordonnees_erreur |
| 147 | 147 | function coordonnees_erreur($phraseur, $msg) |
| 148 | 148 | { |
| 149 | - $entete_length = substr_count($phraseur->entete,"\n"); |
|
| 150 | - $phraseur->err[] = array($msg, |
|
| 151 | - xml_get_current_line_number($phraseur->sax) + $entete_length, |
|
| 152 | - xml_get_current_column_number($phraseur->sax)); |
|
| 149 | + $entete_length = substr_count($phraseur->entete,"\n"); |
|
| 150 | + $phraseur->err[] = array($msg, |
|
| 151 | + xml_get_current_line_number($phraseur->sax) + $entete_length, |
|
| 152 | + xml_get_current_column_number($phraseur->sax)); |
|
| 153 | 153 | } |
| 154 | 154 | |
| 155 | 155 | // http://doc.spip.org/@xml_sax_dist |
| 156 | 156 | function xml_sax_dist($page, $apply=false, $phraseur=NULL, $doctype='', $charset=null) |
| 157 | 157 | { |
| 158 | - if (is_null($charset)) |
|
| 159 | - $charset = $GLOBALS['meta']['charset']; |
|
| 160 | - if ($apply) { |
|
| 161 | - ob_start(); |
|
| 162 | - if (is_array($apply)) |
|
| 163 | - $r = call_user_func_array($page, $apply); |
|
| 164 | - else $r = $page(); |
|
| 165 | - $page = ob_get_contents(); |
|
| 166 | - ob_end_clean(); |
|
| 167 | - // fonction sans aucun "echo", ca doit etre le resultat |
|
| 168 | - if (!$page) $page = $r; |
|
| 169 | - } |
|
| 170 | - |
|
| 171 | - if (!$page) return ''; |
|
| 172 | - // charger la DTD et transcoder les entites, |
|
| 173 | - // et escamoter le doctype que sax mange en php5 mais pas en php4 |
|
| 174 | - if (!$doctype) { |
|
| 175 | - if (!$r = analyser_doctype($page)) { |
|
| 176 | - $page = _MESSAGE_DOCTYPE . _DOCTYPE_ECRIRE |
|
| 177 | - . preg_replace(_REGEXP_DOCTYPE, '', $page); |
|
| 178 | - $r = analyser_doctype($page); |
|
| 179 | - } |
|
| 180 | - list($entete, $avail, $grammaire, $rotlvl) = array_pad($r, 4, null); |
|
| 181 | - $page = substr($page,strlen($entete)); |
|
| 182 | - } else { |
|
| 183 | - $avail = 'SYSTEM'; |
|
| 184 | - $grammaire = $doctype; |
|
| 185 | - $rotlvl = basename($grammaire); |
|
| 186 | - } |
|
| 187 | - |
|
| 188 | - include_spip('xml/analyser_dtd'); |
|
| 189 | - $dtc = charger_dtd($grammaire, $avail, $rotlvl); |
|
| 190 | - $page = sax_bug($page, $dtc, $charset); |
|
| 191 | - |
|
| 192 | - // compatibilite Tidy espace public |
|
| 193 | - if (!$phraseur) { |
|
| 194 | - $indenter_xml = charger_fonction('indenter', 'xml'); |
|
| 195 | - return $indenter_xml($page, $apply); |
|
| 196 | - } |
|
| 197 | - |
|
| 198 | - $xml_parser = xml_parser_create($charset); |
|
| 199 | - |
|
| 200 | - xml_set_element_handler($xml_parser, |
|
| 201 | - array($phraseur, "debutElement"), |
|
| 202 | - array($phraseur, "finElement")); |
|
| 203 | - |
|
| 204 | - xml_set_character_data_handler($xml_parser, |
|
| 205 | - array($phraseur, "textElement")); |
|
| 206 | - |
|
| 207 | - xml_set_processing_instruction_handler($xml_parser, |
|
| 208 | - array($phraseur, 'piElement')); |
|
| 209 | - |
|
| 210 | - xml_set_default_handler($xml_parser, |
|
| 211 | - array($phraseur, "defaultElement")); |
|
| 212 | - |
|
| 213 | - xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); |
|
| 214 | - |
|
| 215 | - $phraseur->sax = $xml_parser; |
|
| 216 | - if (isset($entete)) { |
|
| 217 | - $phraseur->entete = $entete; |
|
| 218 | - } |
|
| 219 | - $phraseur->page = $page; |
|
| 220 | - $phraseur->dtc = $dtc; |
|
| 221 | - $phraseur->phraserTout($xml_parser, $page); |
|
| 222 | - xml_parser_free($xml_parser); |
|
| 223 | - $phraseur->sax = ''; |
|
| 224 | - return $phraseur; |
|
| 158 | + if (is_null($charset)) |
|
| 159 | + $charset = $GLOBALS['meta']['charset']; |
|
| 160 | + if ($apply) { |
|
| 161 | + ob_start(); |
|
| 162 | + if (is_array($apply)) |
|
| 163 | + $r = call_user_func_array($page, $apply); |
|
| 164 | + else $r = $page(); |
|
| 165 | + $page = ob_get_contents(); |
|
| 166 | + ob_end_clean(); |
|
| 167 | + // fonction sans aucun "echo", ca doit etre le resultat |
|
| 168 | + if (!$page) $page = $r; |
|
| 169 | + } |
|
| 170 | + |
|
| 171 | + if (!$page) return ''; |
|
| 172 | + // charger la DTD et transcoder les entites, |
|
| 173 | + // et escamoter le doctype que sax mange en php5 mais pas en php4 |
|
| 174 | + if (!$doctype) { |
|
| 175 | + if (!$r = analyser_doctype($page)) { |
|
| 176 | + $page = _MESSAGE_DOCTYPE . _DOCTYPE_ECRIRE |
|
| 177 | + . preg_replace(_REGEXP_DOCTYPE, '', $page); |
|
| 178 | + $r = analyser_doctype($page); |
|
| 179 | + } |
|
| 180 | + list($entete, $avail, $grammaire, $rotlvl) = array_pad($r, 4, null); |
|
| 181 | + $page = substr($page,strlen($entete)); |
|
| 182 | + } else { |
|
| 183 | + $avail = 'SYSTEM'; |
|
| 184 | + $grammaire = $doctype; |
|
| 185 | + $rotlvl = basename($grammaire); |
|
| 186 | + } |
|
| 187 | + |
|
| 188 | + include_spip('xml/analyser_dtd'); |
|
| 189 | + $dtc = charger_dtd($grammaire, $avail, $rotlvl); |
|
| 190 | + $page = sax_bug($page, $dtc, $charset); |
|
| 191 | + |
|
| 192 | + // compatibilite Tidy espace public |
|
| 193 | + if (!$phraseur) { |
|
| 194 | + $indenter_xml = charger_fonction('indenter', 'xml'); |
|
| 195 | + return $indenter_xml($page, $apply); |
|
| 196 | + } |
|
| 197 | + |
|
| 198 | + $xml_parser = xml_parser_create($charset); |
|
| 199 | + |
|
| 200 | + xml_set_element_handler($xml_parser, |
|
| 201 | + array($phraseur, "debutElement"), |
|
| 202 | + array($phraseur, "finElement")); |
|
| 203 | + |
|
| 204 | + xml_set_character_data_handler($xml_parser, |
|
| 205 | + array($phraseur, "textElement")); |
|
| 206 | + |
|
| 207 | + xml_set_processing_instruction_handler($xml_parser, |
|
| 208 | + array($phraseur, 'piElement')); |
|
| 209 | + |
|
| 210 | + xml_set_default_handler($xml_parser, |
|
| 211 | + array($phraseur, "defaultElement")); |
|
| 212 | + |
|
| 213 | + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); |
|
| 214 | + |
|
| 215 | + $phraseur->sax = $xml_parser; |
|
| 216 | + if (isset($entete)) { |
|
| 217 | + $phraseur->entete = $entete; |
|
| 218 | + } |
|
| 219 | + $phraseur->page = $page; |
|
| 220 | + $phraseur->dtc = $dtc; |
|
| 221 | + $phraseur->phraserTout($xml_parser, $page); |
|
| 222 | + xml_parser_free($xml_parser); |
|
| 223 | + $phraseur->sax = ''; |
|
| 224 | + return $phraseur; |
|
| 225 | 225 | } |
| 226 | 226 | |
| 227 | 227 | // SAX ne dit pas si une Entite est dans un attribut ou non. |
@@ -234,21 +234,21 @@ discard block |
||
| 234 | 234 | // http://doc.spip.org/@sax_bug |
| 235 | 235 | function sax_bug($data, $dtc, $charset=null) |
| 236 | 236 | { |
| 237 | - if (is_null($charset)) |
|
| 238 | - $charset = $GLOBALS['meta']['charset']; |
|
| 237 | + if (is_null($charset)) |
|
| 238 | + $charset = $GLOBALS['meta']['charset']; |
|
| 239 | 239 | |
| 240 | - if ($dtc) { |
|
| 241 | - $trans = array(); |
|
| 240 | + if ($dtc) { |
|
| 241 | + $trans = array(); |
|
| 242 | 242 | |
| 243 | - foreach($dtc->entites as $k => $v) { |
|
| 244 | - if (!strpos(" amp lt gt quot ", $k)) |
|
| 245 | - $trans["&$k;"] = $v; |
|
| 246 | - } |
|
| 247 | - $data = strtr($data, $trans); |
|
| 248 | - } else { |
|
| 249 | - $data = html2unicode($data, true); |
|
| 250 | - } |
|
| 251 | - return unicode2charset($data, $charset); |
|
| 243 | + foreach($dtc->entites as $k => $v) { |
|
| 244 | + if (!strpos(" amp lt gt quot ", $k)) |
|
| 245 | + $trans["&$k;"] = $v; |
|
| 246 | + } |
|
| 247 | + $data = strtr($data, $trans); |
|
| 248 | + } else { |
|
| 249 | + $data = html2unicode($data, true); |
|
| 250 | + } |
|
| 251 | + return unicode2charset($data, $charset); |
|
| 252 | 252 | } |
| 253 | 253 | |
| 254 | 254 | // Retirer < ? xml... ? > et autre PI, ainsi que les commentaires en debut |
@@ -260,42 +260,42 @@ discard block |
||
| 260 | 260 | // http://doc.spip.org/@analyser_doctype |
| 261 | 261 | function analyser_doctype($data) |
| 262 | 262 | { |
| 263 | - if (!preg_match(_REGEXP_DOCTYPE, $data, $page)) { |
|
| 264 | - if (preg_match(_REGEXP_XML, $data, $page)) { |
|
| 265 | - list(,$entete, $topelement) = $page; |
|
| 266 | - if ($topelement == 'rss') |
|
| 267 | - return array($entete, 'PUBLIC', |
|
| 268 | - _DOCTYPE_RSS, |
|
| 269 | - 'rss-0.91.dtd'); |
|
| 270 | - else { |
|
| 271 | - $dtd = $topelement . '.dtd'; |
|
| 272 | - $f = find_in_path($dtd); |
|
| 273 | - if (file_exists($f)) |
|
| 274 | - return array($entete, 'SYSTEM', $f, $dtd); |
|
| 275 | - } |
|
| 276 | - } |
|
| 277 | - spip_log("Dtd pas vu pour " . substr($data, 0, 100)); |
|
| 278 | - return array(); |
|
| 279 | - } |
|
| 280 | - list($entete,, $topelement, $avail,$suite) = $page; |
|
| 281 | - |
|
| 282 | - if (!preg_match('/^"([^"]*)"\s*(.*)$/', $suite, $r)) |
|
| 283 | - if (!preg_match("/^'([^']*)'\s*(.*)$/", $suite, $r)) |
|
| 284 | - return array(); |
|
| 285 | - list(,$rotlvl, $suite) = $r; |
|
| 286 | - |
|
| 287 | - if (!$suite) { |
|
| 288 | - if ($avail != 'SYSTEM') return array(); |
|
| 289 | - $grammaire = $rotlvl; |
|
| 290 | - $rotlvl = ''; |
|
| 291 | - } else { |
|
| 292 | - if (!preg_match('/^"([^"]*)"\s*$/', $suite, $r)) |
|
| 293 | - if (!preg_match("/^'([^']*)'\s*$/", $suite, $r)) |
|
| 294 | - return array(); |
|
| 295 | - |
|
| 296 | - $grammaire = $r[1]; |
|
| 297 | - } |
|
| 298 | - |
|
| 299 | - return array($entete, $avail, $grammaire, $rotlvl); |
|
| 263 | + if (!preg_match(_REGEXP_DOCTYPE, $data, $page)) { |
|
| 264 | + if (preg_match(_REGEXP_XML, $data, $page)) { |
|
| 265 | + list(,$entete, $topelement) = $page; |
|
| 266 | + if ($topelement == 'rss') |
|
| 267 | + return array($entete, 'PUBLIC', |
|
| 268 | + _DOCTYPE_RSS, |
|
| 269 | + 'rss-0.91.dtd'); |
|
| 270 | + else { |
|
| 271 | + $dtd = $topelement . '.dtd'; |
|
| 272 | + $f = find_in_path($dtd); |
|
| 273 | + if (file_exists($f)) |
|
| 274 | + return array($entete, 'SYSTEM', $f, $dtd); |
|
| 275 | + } |
|
| 276 | + } |
|
| 277 | + spip_log("Dtd pas vu pour " . substr($data, 0, 100)); |
|
| 278 | + return array(); |
|
| 279 | + } |
|
| 280 | + list($entete,, $topelement, $avail,$suite) = $page; |
|
| 281 | + |
|
| 282 | + if (!preg_match('/^"([^"]*)"\s*(.*)$/', $suite, $r)) |
|
| 283 | + if (!preg_match("/^'([^']*)'\s*(.*)$/", $suite, $r)) |
|
| 284 | + return array(); |
|
| 285 | + list(,$rotlvl, $suite) = $r; |
|
| 286 | + |
|
| 287 | + if (!$suite) { |
|
| 288 | + if ($avail != 'SYSTEM') return array(); |
|
| 289 | + $grammaire = $rotlvl; |
|
| 290 | + $rotlvl = ''; |
|
| 291 | + } else { |
|
| 292 | + if (!preg_match('/^"([^"]*)"\s*$/', $suite, $r)) |
|
| 293 | + if (!preg_match("/^'([^']*)'\s*$/", $suite, $r)) |
|
| 294 | + return array(); |
|
| 295 | + |
|
| 296 | + $grammaire = $r[1]; |
|
| 297 | + } |
|
| 298 | + |
|
| 299 | + return array($entete, $avail, $grammaire, $rotlvl); |
|
| 300 | 300 | } |
| 301 | 301 | ?> |
@@ -21,251 +21,251 @@ discard block |
||
| 21 | 21 | // http://doc.spip.org/@validerElement |
| 22 | 22 | function validerElement($phraseur, $name, $attrs) |
| 23 | 23 | { |
| 24 | - if (!($p = isset($this->dtc->elements[$name]))) { |
|
| 25 | - if ($p = strpos($name, ':')) { |
|
| 26 | - $name = substr($name, $p+1); |
|
| 27 | - $p = isset($this->dtc->elements[$name]); |
|
| 28 | - } |
|
| 29 | - if (!$p) { |
|
| 30 | - coordonnees_erreur($this," <b>$name</b> : " |
|
| 31 | - . _T('zxml_inconnu_balise')); |
|
| 32 | - return; |
|
| 33 | - } |
|
| 34 | - } |
|
| 35 | - // controler les filles illegitimes, ca suffit |
|
| 36 | - $depth = $this->depth; |
|
| 37 | - $ouvrant = $this->ouvrant; |
|
| 24 | + if (!($p = isset($this->dtc->elements[$name]))) { |
|
| 25 | + if ($p = strpos($name, ':')) { |
|
| 26 | + $name = substr($name, $p+1); |
|
| 27 | + $p = isset($this->dtc->elements[$name]); |
|
| 28 | + } |
|
| 29 | + if (!$p) { |
|
| 30 | + coordonnees_erreur($this," <b>$name</b> : " |
|
| 31 | + . _T('zxml_inconnu_balise')); |
|
| 32 | + return; |
|
| 33 | + } |
|
| 34 | + } |
|
| 35 | + // controler les filles illegitimes, ca suffit |
|
| 36 | + $depth = $this->depth; |
|
| 37 | + $ouvrant = $this->ouvrant; |
|
| 38 | 38 | # spip_log("trouve $name apres " . $ouvrant[$depth]); |
| 39 | - if (isset($ouvrant[$depth])) { |
|
| 40 | - if (preg_match('/^\s*(\w+)/', $ouvrant[$depth], $r)) { |
|
| 41 | - $pere = $r[1]; |
|
| 39 | + if (isset($ouvrant[$depth])) { |
|
| 40 | + if (preg_match('/^\s*(\w+)/', $ouvrant[$depth], $r)) { |
|
| 41 | + $pere = $r[1]; |
|
| 42 | 42 | # spip_log("pere $pere"); |
| 43 | - if (isset($this->dtc->elements[$pere])) { |
|
| 44 | - $fils = $this->dtc->elements[$pere]; |
|
| 43 | + if (isset($this->dtc->elements[$pere])) { |
|
| 44 | + $fils = $this->dtc->elements[$pere]; |
|
| 45 | 45 | # spip_log("rejeton $name fils " . @join(',',$fils)); |
| 46 | - if (!($p = @in_array($name, $fils))) { |
|
| 47 | - if ($p = strpos($name, ':')) { |
|
| 48 | - $p = substr($name, $p+1); |
|
| 49 | - $p = @in_array($p, $fils); |
|
| 50 | - } |
|
| 51 | - } |
|
| 52 | - if (!$p) { |
|
| 53 | - $bons_peres = @join ('</b>, <b>', $this->dtc->peres[$name]); |
|
| 54 | - coordonnees_erreur($this, " <b>$name</b> " |
|
| 55 | - . _T('zxml_non_fils') |
|
| 56 | - . ' <b>' |
|
| 57 | - . $pere |
|
| 58 | - . '</b>' |
|
| 59 | - . (!$bons_peres ? '' |
|
| 60 | - : ('<p style="font-size: 80%"> '._T('zxml_mais_de').' <b>'. $bons_peres . '</b></p>'))); |
|
| 61 | - } else if ($this->dtc->regles[$pere][0]=='/') { |
|
| 62 | - $frat = substr($depth,2); |
|
| 63 | - if (!isset($this->fratrie[$frat])) { |
|
| 64 | - $this->fratrie[$frat] = ''; |
|
| 65 | - } |
|
| 66 | - $this->fratrie[$frat] .= "$name "; |
|
| 67 | - } |
|
| 68 | - } |
|
| 69 | - } |
|
| 70 | - } |
|
| 71 | - // Init de la suite des balises a memoriser si regle difficile |
|
| 72 | - if ($this->dtc->regles[$name][0]=='/') |
|
| 73 | - $this->fratrie[$depth]=''; |
|
| 74 | - if (isset($this->dtc->attributs[$name])) { |
|
| 75 | - foreach ($this->dtc->attributs[$name] as $n => $v) |
|
| 76 | - { if (($v[1] == '#REQUIRED') AND (!isset($attrs[$n]))) |
|
| 77 | - coordonnees_erreur($this, " <b>$n</b>" |
|
| 78 | - . ' : ' |
|
| 79 | - . _T('zxml_obligatoire_attribut') |
|
| 80 | - . " <b>$name</b>"); |
|
| 81 | - } |
|
| 82 | - } |
|
| 46 | + if (!($p = @in_array($name, $fils))) { |
|
| 47 | + if ($p = strpos($name, ':')) { |
|
| 48 | + $p = substr($name, $p+1); |
|
| 49 | + $p = @in_array($p, $fils); |
|
| 50 | + } |
|
| 51 | + } |
|
| 52 | + if (!$p) { |
|
| 53 | + $bons_peres = @join ('</b>, <b>', $this->dtc->peres[$name]); |
|
| 54 | + coordonnees_erreur($this, " <b>$name</b> " |
|
| 55 | + . _T('zxml_non_fils') |
|
| 56 | + . ' <b>' |
|
| 57 | + . $pere |
|
| 58 | + . '</b>' |
|
| 59 | + . (!$bons_peres ? '' |
|
| 60 | + : ('<p style="font-size: 80%"> '._T('zxml_mais_de').' <b>'. $bons_peres . '</b></p>'))); |
|
| 61 | + } else if ($this->dtc->regles[$pere][0]=='/') { |
|
| 62 | + $frat = substr($depth,2); |
|
| 63 | + if (!isset($this->fratrie[$frat])) { |
|
| 64 | + $this->fratrie[$frat] = ''; |
|
| 65 | + } |
|
| 66 | + $this->fratrie[$frat] .= "$name "; |
|
| 67 | + } |
|
| 68 | + } |
|
| 69 | + } |
|
| 70 | + } |
|
| 71 | + // Init de la suite des balises a memoriser si regle difficile |
|
| 72 | + if ($this->dtc->regles[$name][0]=='/') |
|
| 73 | + $this->fratrie[$depth]=''; |
|
| 74 | + if (isset($this->dtc->attributs[$name])) { |
|
| 75 | + foreach ($this->dtc->attributs[$name] as $n => $v) |
|
| 76 | + { if (($v[1] == '#REQUIRED') AND (!isset($attrs[$n]))) |
|
| 77 | + coordonnees_erreur($this, " <b>$n</b>" |
|
| 78 | + . ' : ' |
|
| 79 | + . _T('zxml_obligatoire_attribut') |
|
| 80 | + . " <b>$name</b>"); |
|
| 81 | + } |
|
| 82 | + } |
|
| 83 | 83 | } |
| 84 | 84 | |
| 85 | 85 | // http://doc.spip.org/@validerAttribut |
| 86 | 86 | function validerAttribut($phraseur, $name, $val, $bal) |
| 87 | 87 | { |
| 88 | - // Si la balise est inconnue, eviter d'insister |
|
| 89 | - if (!isset($this->dtc->attributs[$bal])) |
|
| 90 | - return ; |
|
| 88 | + // Si la balise est inconnue, eviter d'insister |
|
| 89 | + if (!isset($this->dtc->attributs[$bal])) |
|
| 90 | + return ; |
|
| 91 | 91 | |
| 92 | - $a = $this->dtc->attributs[$bal]; |
|
| 93 | - if (!isset($a[$name])) { |
|
| 94 | - $bons = join(', ',array_keys($a)); |
|
| 95 | - if ($bons) |
|
| 96 | - $bons = " title=' " . |
|
| 97 | - _T('zxml_connus_attributs') . |
|
| 98 | - ' : ' . |
|
| 99 | - $bons . |
|
| 100 | - "'"; |
|
| 101 | - $bons .= " style='font-weight: bold'"; |
|
| 102 | - coordonnees_erreur($this, " <b>$name</b> " |
|
| 103 | - . _T('zxml_inconnu_attribut').' '._T('zxml_de') |
|
| 104 | - . " <a$bons>$bal</a> (" |
|
| 105 | - . _T('zxml_survoler') |
|
| 106 | - . ")"); |
|
| 107 | - } else{ |
|
| 108 | - $type = $a[$name][0]; |
|
| 109 | - if (!preg_match('/^\w+$/', $type)) |
|
| 110 | - $this->valider_motif($phraseur, $name, $val, $bal, $type); |
|
| 111 | - else if (method_exists($this, $f = 'validerAttribut_' . $type)) |
|
| 112 | - $this->$f($phraseur, $name, $val, $bal); |
|
| 92 | + $a = $this->dtc->attributs[$bal]; |
|
| 93 | + if (!isset($a[$name])) { |
|
| 94 | + $bons = join(', ',array_keys($a)); |
|
| 95 | + if ($bons) |
|
| 96 | + $bons = " title=' " . |
|
| 97 | + _T('zxml_connus_attributs') . |
|
| 98 | + ' : ' . |
|
| 99 | + $bons . |
|
| 100 | + "'"; |
|
| 101 | + $bons .= " style='font-weight: bold'"; |
|
| 102 | + coordonnees_erreur($this, " <b>$name</b> " |
|
| 103 | + . _T('zxml_inconnu_attribut').' '._T('zxml_de') |
|
| 104 | + . " <a$bons>$bal</a> (" |
|
| 105 | + . _T('zxml_survoler') |
|
| 106 | + . ")"); |
|
| 107 | + } else{ |
|
| 108 | + $type = $a[$name][0]; |
|
| 109 | + if (!preg_match('/^\w+$/', $type)) |
|
| 110 | + $this->valider_motif($phraseur, $name, $val, $bal, $type); |
|
| 111 | + else if (method_exists($this, $f = 'validerAttribut_' . $type)) |
|
| 112 | + $this->$f($phraseur, $name, $val, $bal); |
|
| 113 | 113 | # else spip_log("$type type d'attribut inconnu"); |
| 114 | - } |
|
| 114 | + } |
|
| 115 | 115 | } |
| 116 | 116 | |
| 117 | 117 | function validerAttribut_NMTOKEN($phraseur, $name, $val, $bal) |
| 118 | 118 | { |
| 119 | - $this->valider_motif($phraseur, $name, $val, $bal, _REGEXP_NMTOKEN); |
|
| 119 | + $this->valider_motif($phraseur, $name, $val, $bal, _REGEXP_NMTOKEN); |
|
| 120 | 120 | } |
| 121 | 121 | |
| 122 | 122 | function validerAttribut_NMTOKENS($phraseur, $name, $val, $bal) |
| 123 | 123 | { |
| 124 | - $this->valider_motif($phraseur, $name, $val, $bal, _REGEXP_NMTOKENS); |
|
| 124 | + $this->valider_motif($phraseur, $name, $val, $bal, _REGEXP_NMTOKENS); |
|
| 125 | 125 | } |
| 126 | 126 | |
| 127 | 127 | // http://doc.spip.org/@validerAttribut_ID |
| 128 | 128 | function validerAttribut_ID($phraseur, $name, $val, $bal) |
| 129 | 129 | { |
| 130 | - if (isset($this->ids[$val])) { |
|
| 131 | - list($l,$c) = $this->ids[$val]; |
|
| 132 | - coordonnees_erreur($this, " <p><b>$val</b> " |
|
| 133 | - . _T('zxml_valeur_attribut') |
|
| 134 | - . " <b>$name</b> " |
|
| 135 | - . _T('zxml_de') |
|
| 136 | - . " <b>$bal</b> " |
|
| 137 | - . _T('zxml_vu') |
|
| 138 | - . " (L$l,C$c)"); |
|
| 139 | - } else { |
|
| 140 | - $this->valider_motif($phraseur, $name, $val, $bal, _REGEXP_ID); |
|
| 141 | - $this->ids[$val] = array(xml_get_current_line_number($phraseur), xml_get_current_column_number($phraseur)); |
|
| 142 | - } |
|
| 130 | + if (isset($this->ids[$val])) { |
|
| 131 | + list($l,$c) = $this->ids[$val]; |
|
| 132 | + coordonnees_erreur($this, " <p><b>$val</b> " |
|
| 133 | + . _T('zxml_valeur_attribut') |
|
| 134 | + . " <b>$name</b> " |
|
| 135 | + . _T('zxml_de') |
|
| 136 | + . " <b>$bal</b> " |
|
| 137 | + . _T('zxml_vu') |
|
| 138 | + . " (L$l,C$c)"); |
|
| 139 | + } else { |
|
| 140 | + $this->valider_motif($phraseur, $name, $val, $bal, _REGEXP_ID); |
|
| 141 | + $this->ids[$val] = array(xml_get_current_line_number($phraseur), xml_get_current_column_number($phraseur)); |
|
| 142 | + } |
|
| 143 | 143 | } |
| 144 | 144 | |
| 145 | 145 | // http://doc.spip.org/@validerAttribut_IDREF |
| 146 | 146 | function validerAttribut_IDREF($phraseur, $name, $val, $bal) |
| 147 | 147 | { |
| 148 | - $this->idrefs[] = array($val, xml_get_current_line_number($phraseur), xml_get_current_column_number($phraseur)); |
|
| 148 | + $this->idrefs[] = array($val, xml_get_current_line_number($phraseur), xml_get_current_column_number($phraseur)); |
|
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | // http://doc.spip.org/@validerAttribut_IDREFS |
| 152 | 152 | function validerAttribut_IDREFS($phraseur, $name, $val, $bal) |
| 153 | 153 | { |
| 154 | - $this->idrefss[] = array($val, xml_get_current_line_number($phraseur), xml_get_current_column_number($phraseur)); |
|
| 154 | + $this->idrefss[] = array($val, xml_get_current_line_number($phraseur), xml_get_current_column_number($phraseur)); |
|
| 155 | 155 | } |
| 156 | 156 | |
| 157 | 157 | // http://doc.spip.org/@valider_motif |
| 158 | 158 | function valider_motif($phraseur, $name, $val, $bal, $motif) |
| 159 | 159 | { |
| 160 | - if (!preg_match($motif, $val)) { |
|
| 161 | - coordonnees_erreur($this, "<b>$val</b> " |
|
| 162 | - . _T('zxml_valeur_attribut') |
|
| 163 | - . " <b>$name</b> " |
|
| 164 | - . _T('zxml_de') |
|
| 165 | - . " <b>$bal</b> " |
|
| 166 | - . _T('zxml_non_conforme') |
|
| 167 | - . "</p><p>" |
|
| 168 | - . "<b>" . $motif . "</b>"); |
|
| 169 | - } |
|
| 160 | + if (!preg_match($motif, $val)) { |
|
| 161 | + coordonnees_erreur($this, "<b>$val</b> " |
|
| 162 | + . _T('zxml_valeur_attribut') |
|
| 163 | + . " <b>$name</b> " |
|
| 164 | + . _T('zxml_de') |
|
| 165 | + . " <b>$bal</b> " |
|
| 166 | + . _T('zxml_non_conforme') |
|
| 167 | + . "</p><p>" |
|
| 168 | + . "<b>" . $motif . "</b>"); |
|
| 169 | + } |
|
| 170 | 170 | } |
| 171 | 171 | |
| 172 | 172 | // http://doc.spip.org/@valider_idref |
| 173 | 173 | function valider_idref($nom, $ligne, $col) |
| 174 | 174 | { |
| 175 | - if (!isset($this->ids[$nom])) |
|
| 176 | - $this->err[]= array(" <p><b>$nom</b> " . _T('zxml_inconnu_id'), $ligne, $col); |
|
| 175 | + if (!isset($this->ids[$nom])) |
|
| 176 | + $this->err[]= array(" <p><b>$nom</b> " . _T('zxml_inconnu_id'), $ligne, $col); |
|
| 177 | 177 | } |
| 178 | 178 | |
| 179 | 179 | // http://doc.spip.org/@valider_passe2 |
| 180 | 180 | function valider_passe2() |
| 181 | 181 | { |
| 182 | - if (!$this->err) { |
|
| 183 | - foreach ($this->idrefs as $idref) { |
|
| 184 | - list($nom, $ligne, $col) = $idref; |
|
| 185 | - $this->valider_idref($nom, $ligne, $col); |
|
| 186 | - } |
|
| 187 | - foreach ($this->idrefss as $idref) { |
|
| 188 | - list($noms, $ligne, $col) = $idref; |
|
| 189 | - foreach(preg_split('/\s+/', $noms) as $nom) |
|
| 190 | - $this->valider_idref($nom, $ligne, $col); |
|
| 191 | - } |
|
| 192 | - } |
|
| 182 | + if (!$this->err) { |
|
| 183 | + foreach ($this->idrefs as $idref) { |
|
| 184 | + list($nom, $ligne, $col) = $idref; |
|
| 185 | + $this->valider_idref($nom, $ligne, $col); |
|
| 186 | + } |
|
| 187 | + foreach ($this->idrefss as $idref) { |
|
| 188 | + list($noms, $ligne, $col) = $idref; |
|
| 189 | + foreach(preg_split('/\s+/', $noms) as $nom) |
|
| 190 | + $this->valider_idref($nom, $ligne, $col); |
|
| 191 | + } |
|
| 192 | + } |
|
| 193 | 193 | } |
| 194 | 194 | |
| 195 | 195 | // http://doc.spip.org/@debutElement |
| 196 | 196 | function debutElement($phraseur, $name, $attrs) |
| 197 | 197 | { |
| 198 | - if ($this->dtc->elements) |
|
| 199 | - $this->validerElement($phraseur, $name, $attrs); |
|
| 198 | + if ($this->dtc->elements) |
|
| 199 | + $this->validerElement($phraseur, $name, $attrs); |
|
| 200 | 200 | |
| 201 | - if ($f = $this->process['debut']) $f($this, $name, $attrs); |
|
| 202 | - $depth = $this->depth; |
|
| 203 | - $this->debuts[$depth] = strlen($this->res); |
|
| 204 | - foreach ($attrs as $k => $v) { |
|
| 205 | - $this->validerAttribut($phraseur, $k, $v, $name); |
|
| 206 | - } |
|
| 201 | + if ($f = $this->process['debut']) $f($this, $name, $attrs); |
|
| 202 | + $depth = $this->depth; |
|
| 203 | + $this->debuts[$depth] = strlen($this->res); |
|
| 204 | + foreach ($attrs as $k => $v) { |
|
| 205 | + $this->validerAttribut($phraseur, $k, $v, $name); |
|
| 206 | + } |
|
| 207 | 207 | } |
| 208 | 208 | |
| 209 | 209 | // http://doc.spip.org/@finElement |
| 210 | 210 | function finElement($phraseur, $name) |
| 211 | 211 | { |
| 212 | - $depth = $this->depth; |
|
| 213 | - $contenu = $this->contenu; |
|
| 212 | + $depth = $this->depth; |
|
| 213 | + $contenu = $this->contenu; |
|
| 214 | 214 | |
| 215 | - $n = strlen($this->res); |
|
| 216 | - $c = strlen(trim($contenu[$depth])); |
|
| 217 | - $k = $this->debuts[$depth]; |
|
| 215 | + $n = strlen($this->res); |
|
| 216 | + $c = strlen(trim($contenu[$depth])); |
|
| 217 | + $k = $this->debuts[$depth]; |
|
| 218 | 218 | |
| 219 | - $regle = $this->dtc->regles[$name]; |
|
| 220 | - $vide = ($regle == 'EMPTY'); |
|
| 221 | - // controler que les balises devant etre vides le sont |
|
| 222 | - if ($vide) { |
|
| 223 | - if ($n <> ($k + $c)) |
|
| 224 | - coordonnees_erreur($this, " <p><b>$name</b> " |
|
| 225 | - . _T('zxml_nonvide_balise')); |
|
| 226 | - // pour les regles PCDATA ou iteration de disjonction, tout est fait |
|
| 227 | - } elseif ($regle AND ($regle != '*')) { |
|
| 228 | - if ($regle == '+') { |
|
| 229 | - // iteration de disjonction non vide: 1 balise au - |
|
| 230 | - if ($n == $k) { |
|
| 231 | - coordonnees_erreur($this, "<p>\n<b>$name</b> " |
|
| 232 | - . _T('zxml_vide_balise')); |
|
| 233 | - } |
|
| 234 | - } else { |
|
| 235 | - $f = $this->fratrie[substr($depth,2)]; |
|
| 236 | - if (!preg_match($regle, $f)) { |
|
| 237 | - coordonnees_erreur($this, |
|
| 238 | - " <p>\n<b>$name</b> " |
|
| 239 | - . _T('zxml_succession_fils_incorrecte') |
|
| 240 | - . ' : <b>' |
|
| 241 | - . $f |
|
| 242 | - . '</b>'); |
|
| 243 | - } |
|
| 244 | - } |
|
| 219 | + $regle = $this->dtc->regles[$name]; |
|
| 220 | + $vide = ($regle == 'EMPTY'); |
|
| 221 | + // controler que les balises devant etre vides le sont |
|
| 222 | + if ($vide) { |
|
| 223 | + if ($n <> ($k + $c)) |
|
| 224 | + coordonnees_erreur($this, " <p><b>$name</b> " |
|
| 225 | + . _T('zxml_nonvide_balise')); |
|
| 226 | + // pour les regles PCDATA ou iteration de disjonction, tout est fait |
|
| 227 | + } elseif ($regle AND ($regle != '*')) { |
|
| 228 | + if ($regle == '+') { |
|
| 229 | + // iteration de disjonction non vide: 1 balise au - |
|
| 230 | + if ($n == $k) { |
|
| 231 | + coordonnees_erreur($this, "<p>\n<b>$name</b> " |
|
| 232 | + . _T('zxml_vide_balise')); |
|
| 233 | + } |
|
| 234 | + } else { |
|
| 235 | + $f = $this->fratrie[substr($depth,2)]; |
|
| 236 | + if (!preg_match($regle, $f)) { |
|
| 237 | + coordonnees_erreur($this, |
|
| 238 | + " <p>\n<b>$name</b> " |
|
| 239 | + . _T('zxml_succession_fils_incorrecte') |
|
| 240 | + . ' : <b>' |
|
| 241 | + . $f |
|
| 242 | + . '</b>'); |
|
| 243 | + } |
|
| 244 | + } |
|
| 245 | 245 | |
| 246 | - } |
|
| 247 | - if ($f = $this->process['fin']) $f($this, $name, $vide); |
|
| 246 | + } |
|
| 247 | + if ($f = $this->process['fin']) $f($this, $name, $vide); |
|
| 248 | 248 | } |
| 249 | 249 | |
| 250 | 250 | // http://doc.spip.org/@textElement |
| 251 | 251 | function textElement($phraseur, $data) |
| 252 | 252 | { |
| 253 | - if (trim($data)) { |
|
| 254 | - $d = $this->depth; |
|
| 255 | - $d = $this->ouvrant[$d]; |
|
| 256 | - preg_match('/^\s*(\S+)/', $d, $m); |
|
| 257 | - if ($this->dtc->pcdata[$m[1]]) { |
|
| 258 | - coordonnees_erreur($this, " <p><b>". $m[1] . "</b> " |
|
| 259 | - . _T('zxml_nonvide_balise') // message a affiner |
|
| 260 | - ); |
|
| 261 | - } |
|
| 262 | - } |
|
| 263 | - if ($f = $this->process['text']) $f($this, $data); |
|
| 253 | + if (trim($data)) { |
|
| 254 | + $d = $this->depth; |
|
| 255 | + $d = $this->ouvrant[$d]; |
|
| 256 | + preg_match('/^\s*(\S+)/', $d, $m); |
|
| 257 | + if ($this->dtc->pcdata[$m[1]]) { |
|
| 258 | + coordonnees_erreur($this, " <p><b>". $m[1] . "</b> " |
|
| 259 | + . _T('zxml_nonvide_balise') // message a affiner |
|
| 260 | + ); |
|
| 261 | + } |
|
| 262 | + } |
|
| 263 | + if ($f = $this->process['text']) $f($this, $data); |
|
| 264 | 264 | } |
| 265 | 265 | |
| 266 | 266 | function piElement($phraseur, $target, $data) |
| 267 | 267 | { |
| 268 | - if ($f = $this->process['pi']) $f($this, $target, $data); |
|
| 268 | + if ($f = $this->process['pi']) $f($this, $target, $data); |
|
| 269 | 269 | } |
| 270 | 270 | |
| 271 | 271 | // Denonciation des entitees XML inconnues |
@@ -278,61 +278,61 @@ discard block |
||
| 278 | 278 | // http://doc.spip.org/@defautElement |
| 279 | 279 | function defaultElement($phraseur, $data) |
| 280 | 280 | { |
| 281 | - if (!preg_match('/^<!--/', $data) |
|
| 282 | - AND (preg_match_all('/&([^;]*)?/', $data, $r, PREG_SET_ORDER))) |
|
| 283 | - foreach ($r as $m) { |
|
| 284 | - list($t,$e) = $m; |
|
| 285 | - if (!isset($this->dtc->entites[$e])) |
|
| 286 | - coordonnees_erreur($this, " <b>$e</b> " |
|
| 287 | - . _T('zxml_inconnu_entite') |
|
| 288 | - . ' ' |
|
| 289 | - ); |
|
| 290 | - } |
|
| 291 | - if (isset($this->process['default']) AND ($f = $this->process['default'])) { |
|
| 292 | - $f($this, $data); |
|
| 293 | - } |
|
| 281 | + if (!preg_match('/^<!--/', $data) |
|
| 282 | + AND (preg_match_all('/&([^;]*)?/', $data, $r, PREG_SET_ORDER))) |
|
| 283 | + foreach ($r as $m) { |
|
| 284 | + list($t,$e) = $m; |
|
| 285 | + if (!isset($this->dtc->entites[$e])) |
|
| 286 | + coordonnees_erreur($this, " <b>$e</b> " |
|
| 287 | + . _T('zxml_inconnu_entite') |
|
| 288 | + . ' ' |
|
| 289 | + ); |
|
| 290 | + } |
|
| 291 | + if (isset($this->process['default']) AND ($f = $this->process['default'])) { |
|
| 292 | + $f($this, $data); |
|
| 293 | + } |
|
| 294 | 294 | } |
| 295 | 295 | |
| 296 | 296 | // http://doc.spip.org/@phraserTout |
| 297 | 297 | function phraserTout($phraseur, $data) |
| 298 | 298 | { |
| 299 | - xml_parsestring($this, $data); |
|
| 299 | + xml_parsestring($this, $data); |
|
| 300 | 300 | |
| 301 | - if (!$this->dtc OR preg_match(',^' . _MESSAGE_DOCTYPE . ',', $data)) { |
|
| 302 | - $this->err[]= array('DOCTYPE ?', 0, 0); |
|
| 303 | - } else { |
|
| 304 | - $this->valider_passe2($this); |
|
| 305 | - } |
|
| 301 | + if (!$this->dtc OR preg_match(',^' . _MESSAGE_DOCTYPE . ',', $data)) { |
|
| 302 | + $this->err[]= array('DOCTYPE ?', 0, 0); |
|
| 303 | + } else { |
|
| 304 | + $this->valider_passe2($this); |
|
| 305 | + } |
|
| 306 | 306 | } |
| 307 | 307 | |
| 308 | 308 | // Init |
| 309 | 309 | function ValidateurXML($process=array()) { |
| 310 | - if (is_array($process)) $this->process = $process; |
|
| 310 | + if (is_array($process)) $this->process = $process; |
|
| 311 | 311 | } |
| 312 | 312 | |
| 313 | - var $ids = array(); |
|
| 314 | - var $idrefs = array(); |
|
| 315 | - var $idrefss = array(); |
|
| 316 | - var $debuts = array(); |
|
| 317 | - var $fratrie = array(); |
|
| 313 | + var $ids = array(); |
|
| 314 | + var $idrefs = array(); |
|
| 315 | + var $idrefss = array(); |
|
| 316 | + var $debuts = array(); |
|
| 317 | + var $fratrie = array(); |
|
| 318 | 318 | |
| 319 | - var $dtc = NULL; |
|
| 320 | - var $sax = NULL; |
|
| 321 | - var $depth = ""; |
|
| 322 | - var $entete = ''; |
|
| 323 | - var $page = ''; |
|
| 324 | - var $res = ""; |
|
| 325 | - var $err = array(); |
|
| 326 | - var $contenu = array(); |
|
| 327 | - var $ouvrant = array(); |
|
| 328 | - var $reperes = array(); |
|
| 329 | - var $process = array( |
|
| 330 | - 'debut' => 'xml_debutElement', |
|
| 331 | - 'fin' => 'xml_finElement', |
|
| 332 | - 'text' => 'xml_textElement', |
|
| 333 | - 'pi' => 'xml_piElement', |
|
| 334 | - 'default' => 'xml_defaultElement' |
|
| 335 | - ); |
|
| 319 | + var $dtc = NULL; |
|
| 320 | + var $sax = NULL; |
|
| 321 | + var $depth = ""; |
|
| 322 | + var $entete = ''; |
|
| 323 | + var $page = ''; |
|
| 324 | + var $res = ""; |
|
| 325 | + var $err = array(); |
|
| 326 | + var $contenu = array(); |
|
| 327 | + var $ouvrant = array(); |
|
| 328 | + var $reperes = array(); |
|
| 329 | + var $process = array( |
|
| 330 | + 'debut' => 'xml_debutElement', |
|
| 331 | + 'fin' => 'xml_finElement', |
|
| 332 | + 'text' => 'xml_textElement', |
|
| 333 | + 'pi' => 'xml_piElement', |
|
| 334 | + 'default' => 'xml_defaultElement' |
|
| 335 | + ); |
|
| 336 | 336 | } |
| 337 | 337 | |
| 338 | 338 | // Retourne une structure ValidateurXML, dont le champ "err" est un tableau |
@@ -341,8 +341,8 @@ discard block |
||
| 341 | 341 | // http://doc.spip.org/@xml_valider_dist |
| 342 | 342 | function xml_valider_dist($page, $apply=false, $process=false, $doctype='', $charset=null) |
| 343 | 343 | { |
| 344 | - $f = new ValidateurXML($process); |
|
| 345 | - $sax = charger_fonction('sax', 'xml'); |
|
| 346 | - return $sax($page, $apply, $f, $doctype, $charset); |
|
| 344 | + $f = new ValidateurXML($process); |
|
| 345 | + $sax = charger_fonction('sax', 'xml'); |
|
| 346 | + return $sax($page, $apply, $f, $doctype, $charset); |
|
| 347 | 347 | } |
| 348 | 348 | ?> |
@@ -13,7 +13,7 @@ discard block |
||
| 13 | 13 | if (!defined('_ECRIRE_INC_VERSION')) return; |
| 14 | 14 | |
| 15 | 15 | define('_REGEXP_DOCTYPE', |
| 16 | - '/^((?:<\001?[?][^>]*>\s*)*(?:<!--.*?-->\s*)*)*<!DOCTYPE\s+(\w+)\s+(\w+)\s*([^>]*)>\s*/s'); |
|
| 16 | + '/^((?:<\001?[?][^>]*>\s*)*(?:<!--.*?-->\s*)*)*<!DOCTYPE\s+(\w+)\s+(\w+)\s*([^>]*)>\s*/s'); |
|
| 17 | 17 | |
| 18 | 18 | define('_REGEXP_XML', '/^(\s*(?:<[?][^x>][^>]*>\s*)?(?:<[?]xml[^>]*>)?\s*(?:<!--.*?-->\s*)*)<(\w+)/s'); |
| 19 | 19 | |
@@ -31,14 +31,14 @@ discard block |
||
| 31 | 31 | define('_REGEXP_ENTITY_DEF', '/^%(' . _SUB_REGEXP_SYMBOL . '+);/'); |
| 32 | 32 | define('_REGEXP_TYPE_XML', 'PUBLIC|SYSTEM|INCLUDE|IGNORE|CDATA'); |
| 33 | 33 | define('_REGEXP_ENTITY_DECL', '/^<!ENTITY\s+(%?)\s*(' . |
| 34 | - _SUB_REGEXP_SYMBOL . |
|
| 35 | - '+;?)\s+(' . |
|
| 36 | - _REGEXP_TYPE_XML . |
|
| 37 | - ')?\s*(' . |
|
| 38 | - "('([^']*)')" . |
|
| 39 | - '|("([^"]*)")' . |
|
| 34 | + _SUB_REGEXP_SYMBOL . |
|
| 35 | + '+;?)\s+(' . |
|
| 36 | + _REGEXP_TYPE_XML . |
|
| 37 | + ')?\s*(' . |
|
| 38 | + "('([^']*)')" . |
|
| 39 | + '|("([^"]*)")' . |
|
| 40 | 40 | '|\s*(%' . _SUB_REGEXP_SYMBOL . '+;)\s*' . |
| 41 | - ')\s*(--.*?--)?("([^"]*)")?\s*>\s*(.*)$/s'); |
|
| 41 | + ')\s*(--.*?--)?("([^"]*)")?\s*>\s*(.*)$/s'); |
|
| 42 | 42 | |
| 43 | 43 | define('_REGEXP_INCLUDE_USE', '/^<!\[\s*%\s*([^;]*);\s*\[\s*(.*)$/s'); |
| 44 | 44 | |
@@ -47,12 +47,12 @@ discard block |
||
| 47 | 47 | // Document Type Compilation |
| 48 | 48 | |
| 49 | 49 | class DTC { |
| 50 | - var $macros = array(); |
|
| 51 | - var $elements = array(); |
|
| 52 | - var $peres = array(); |
|
| 53 | - var $attributs = array(); |
|
| 54 | - var $entites = array(); |
|
| 55 | - var $regles = array(); |
|
| 56 | - var $pcdata = array(); |
|
| 50 | + var $macros = array(); |
|
| 51 | + var $elements = array(); |
|
| 52 | + var $peres = array(); |
|
| 53 | + var $attributs = array(); |
|
| 54 | + var $entites = array(); |
|
| 55 | + var $regles = array(); |
|
| 56 | + var $pcdata = array(); |
|
| 57 | 57 | } |
| 58 | 58 | ?> |
@@ -30,38 +30,38 @@ discard block |
||
| 30 | 30 | */ |
| 31 | 31 | function base_upgrade_dist($titre='', $reprise='') |
| 32 | 32 | { |
| 33 | - if (!$titre) return; // anti-testeur automatique |
|
| 34 | - if ($GLOBALS['spip_version_base']!=$GLOBALS['meta']['version_installee']) { |
|
| 35 | - if (!is_numeric(_request('reinstall'))) { |
|
| 36 | - include_spip('base/create'); |
|
| 37 | - spip_log("recree les tables eventuellement disparues","maj."._LOG_INFO_IMPORTANTE); |
|
| 38 | - creer_base(); |
|
| 39 | - } |
|
| 33 | + if (!$titre) return; // anti-testeur automatique |
|
| 34 | + if ($GLOBALS['spip_version_base']!=$GLOBALS['meta']['version_installee']) { |
|
| 35 | + if (!is_numeric(_request('reinstall'))) { |
|
| 36 | + include_spip('base/create'); |
|
| 37 | + spip_log("recree les tables eventuellement disparues","maj."._LOG_INFO_IMPORTANTE); |
|
| 38 | + creer_base(); |
|
| 39 | + } |
|
| 40 | 40 | |
| 41 | - // quand on rentre par ici, c'est toujours une mise a jour de SPIP |
|
| 42 | - // lancement de l'upgrade SPIP |
|
| 43 | - $res = maj_base(); |
|
| 41 | + // quand on rentre par ici, c'est toujours une mise a jour de SPIP |
|
| 42 | + // lancement de l'upgrade SPIP |
|
| 43 | + $res = maj_base(); |
|
| 44 | 44 | |
| 45 | - if ($res) { |
|
| 46 | - // on arrete tout ici ! |
|
| 47 | - exit; |
|
| 48 | - } |
|
| 49 | - } |
|
| 50 | - spip_log("Fin de mise a jour SQL. Debut m-a-j acces et config","maj."._LOG_INFO_IMPORTANTE); |
|
| 45 | + if ($res) { |
|
| 46 | + // on arrete tout ici ! |
|
| 47 | + exit; |
|
| 48 | + } |
|
| 49 | + } |
|
| 50 | + spip_log("Fin de mise a jour SQL. Debut m-a-j acces et config","maj."._LOG_INFO_IMPORTANTE); |
|
| 51 | 51 | |
| 52 | - // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides |
|
| 53 | - @spip_unlink(_CACHE_RUBRIQUES); |
|
| 54 | - @spip_unlink(_CACHE_PIPELINES); |
|
| 55 | - @spip_unlink(_CACHE_PLUGINS_PATH); |
|
| 56 | - @spip_unlink(_CACHE_PLUGINS_OPT); |
|
| 57 | - @spip_unlink(_CACHE_PLUGINS_FCT); |
|
| 58 | - @spip_unlink(_CACHE_CHEMIN); |
|
| 59 | - @spip_unlink(_DIR_TMP."plugin_xml_cache.gz"); |
|
| 52 | + // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides |
|
| 53 | + @spip_unlink(_CACHE_RUBRIQUES); |
|
| 54 | + @spip_unlink(_CACHE_PIPELINES); |
|
| 55 | + @spip_unlink(_CACHE_PLUGINS_PATH); |
|
| 56 | + @spip_unlink(_CACHE_PLUGINS_OPT); |
|
| 57 | + @spip_unlink(_CACHE_PLUGINS_FCT); |
|
| 58 | + @spip_unlink(_CACHE_CHEMIN); |
|
| 59 | + @spip_unlink(_DIR_TMP."plugin_xml_cache.gz"); |
|
| 60 | 60 | |
| 61 | - include_spip('inc/auth'); |
|
| 62 | - auth_synchroniser_distant(); |
|
| 63 | - $config = charger_fonction('config', 'inc'); |
|
| 64 | - $config(); |
|
| 61 | + include_spip('inc/auth'); |
|
| 62 | + auth_synchroniser_distant(); |
|
| 63 | + $config = charger_fonction('config', 'inc'); |
|
| 64 | + $config(); |
|
| 65 | 65 | } |
| 66 | 66 | |
| 67 | 67 | /** |
@@ -74,63 +74,63 @@ discard block |
||
| 74 | 74 | * @return array|bool |
| 75 | 75 | */ |
| 76 | 76 | function maj_base($version_cible = 0, $redirect = '') { |
| 77 | - global $spip_version_base; |
|
| 77 | + global $spip_version_base; |
|
| 78 | 78 | |
| 79 | - $version_installee = @$GLOBALS['meta']['version_installee']; |
|
| 80 | - // |
|
| 81 | - // Si version nulle ou inexistante, c'est une nouvelle installation |
|
| 82 | - // => ne pas passer par le processus de mise a jour. |
|
| 83 | - // De meme en cas de version superieure: ca devait etre un test, |
|
| 84 | - // il y a eu le message d'avertissement il doit savoir ce qu'il fait |
|
| 85 | - // |
|
| 86 | - // version_installee = 1.702; quand on a besoin de forcer une MAJ |
|
| 79 | + $version_installee = @$GLOBALS['meta']['version_installee']; |
|
| 80 | + // |
|
| 81 | + // Si version nulle ou inexistante, c'est une nouvelle installation |
|
| 82 | + // => ne pas passer par le processus de mise a jour. |
|
| 83 | + // De meme en cas de version superieure: ca devait etre un test, |
|
| 84 | + // il y a eu le message d'avertissement il doit savoir ce qu'il fait |
|
| 85 | + // |
|
| 86 | + // version_installee = 1.702; quand on a besoin de forcer une MAJ |
|
| 87 | 87 | |
| 88 | - spip_log("Version anterieure: $version_installee. Courante: $spip_version_base","maj."._LOG_INFO_IMPORTANTE); |
|
| 89 | - if (!$version_installee OR ($spip_version_base < $version_installee)) { |
|
| 90 | - sql_replace('spip_meta', |
|
| 91 | - array('nom' => 'version_installee', |
|
| 92 | - 'valeur' => $spip_version_base, |
|
| 93 | - 'impt' => 'non')); |
|
| 94 | - return false; |
|
| 95 | - } |
|
| 96 | - if (!upgrade_test()) return true; |
|
| 88 | + spip_log("Version anterieure: $version_installee. Courante: $spip_version_base","maj."._LOG_INFO_IMPORTANTE); |
|
| 89 | + if (!$version_installee OR ($spip_version_base < $version_installee)) { |
|
| 90 | + sql_replace('spip_meta', |
|
| 91 | + array('nom' => 'version_installee', |
|
| 92 | + 'valeur' => $spip_version_base, |
|
| 93 | + 'impt' => 'non')); |
|
| 94 | + return false; |
|
| 95 | + } |
|
| 96 | + if (!upgrade_test()) return true; |
|
| 97 | 97 | |
| 98 | - $cible = ($version_cible ? $version_cible : $spip_version_base); |
|
| 98 | + $cible = ($version_cible ? $version_cible : $spip_version_base); |
|
| 99 | 99 | |
| 100 | - if ($version_installee <= 1.926) { |
|
| 101 | - $n = floor($version_installee * 10); |
|
| 102 | - while ($n < 19) { |
|
| 103 | - $nom = sprintf("v%03d",$n); |
|
| 104 | - $f = charger_fonction($nom, 'maj', true); |
|
| 105 | - if ($f) { |
|
| 106 | - spip_log( "$f repercute les modifications de la version " . ($n/10),"maj."._LOG_INFO_IMPORTANTE); |
|
| 107 | - $f($version_installee, $spip_version_base); |
|
| 108 | - } else spip_log( "pas de fonction pour la maj $n $nom","maj."._LOG_INFO_IMPORTANTE); |
|
| 109 | - $n++; |
|
| 110 | - } |
|
| 111 | - include_spip('maj/v019_pre193'); |
|
| 112 | - v019_pre193($version_installee, $version_cible); |
|
| 113 | - } |
|
| 114 | - if ($version_installee < 2000) { |
|
| 115 | - if ($version_installee < 2) |
|
| 116 | - $version_installee = $version_installee*1000; |
|
| 117 | - include_spip('maj/v019'); |
|
| 118 | - } |
|
| 119 | - if ($cible < 2) |
|
| 120 | - $cible = $cible*1000; |
|
| 100 | + if ($version_installee <= 1.926) { |
|
| 101 | + $n = floor($version_installee * 10); |
|
| 102 | + while ($n < 19) { |
|
| 103 | + $nom = sprintf("v%03d",$n); |
|
| 104 | + $f = charger_fonction($nom, 'maj', true); |
|
| 105 | + if ($f) { |
|
| 106 | + spip_log( "$f repercute les modifications de la version " . ($n/10),"maj."._LOG_INFO_IMPORTANTE); |
|
| 107 | + $f($version_installee, $spip_version_base); |
|
| 108 | + } else spip_log( "pas de fonction pour la maj $n $nom","maj."._LOG_INFO_IMPORTANTE); |
|
| 109 | + $n++; |
|
| 110 | + } |
|
| 111 | + include_spip('maj/v019_pre193'); |
|
| 112 | + v019_pre193($version_installee, $version_cible); |
|
| 113 | + } |
|
| 114 | + if ($version_installee < 2000) { |
|
| 115 | + if ($version_installee < 2) |
|
| 116 | + $version_installee = $version_installee*1000; |
|
| 117 | + include_spip('maj/v019'); |
|
| 118 | + } |
|
| 119 | + if ($cible < 2) |
|
| 120 | + $cible = $cible*1000; |
|
| 121 | 121 | |
| 122 | - include_spip('maj/svn10000'); |
|
| 123 | - ksort($GLOBALS['maj']); |
|
| 124 | - $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee','meta', $redirect, true); |
|
| 125 | - if ($res) { |
|
| 126 | - if (!is_array($res)) |
|
| 127 | - spip_log("Pb d'acces SQL a la mise a jour","maj."._LOG_INFO_ERREUR); |
|
| 128 | - else { |
|
| 129 | - echo _T('avis_operation_echec') . ' ' . join(' ', $res); |
|
| 130 | - echo install_fin_html(); |
|
| 131 | - } |
|
| 132 | - } |
|
| 133 | - return $res; |
|
| 122 | + include_spip('maj/svn10000'); |
|
| 123 | + ksort($GLOBALS['maj']); |
|
| 124 | + $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee','meta', $redirect, true); |
|
| 125 | + if ($res) { |
|
| 126 | + if (!is_array($res)) |
|
| 127 | + spip_log("Pb d'acces SQL a la mise a jour","maj."._LOG_INFO_ERREUR); |
|
| 128 | + else { |
|
| 129 | + echo _T('avis_operation_echec') . ' ' . join(' ', $res); |
|
| 130 | + echo install_fin_html(); |
|
| 131 | + } |
|
| 132 | + } |
|
| 133 | + return $res; |
|
| 134 | 134 | } |
| 135 | 135 | |
| 136 | 136 | /** |
@@ -166,48 +166,48 @@ discard block |
||
| 166 | 166 | */ |
| 167 | 167 | function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta='meta'){ |
| 168 | 168 | |
| 169 | - if ($table_meta!=='meta') |
|
| 170 | - lire_metas($table_meta); |
|
| 171 | - if ( (!isset($GLOBALS[$table_meta][$nom_meta_base_version]) ) |
|
| 172 | - || (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version],$version_cible,'='))){ |
|
| 169 | + if ($table_meta!=='meta') |
|
| 170 | + lire_metas($table_meta); |
|
| 171 | + if ( (!isset($GLOBALS[$table_meta][$nom_meta_base_version]) ) |
|
| 172 | + || (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version],$version_cible,'='))){ |
|
| 173 | 173 | |
| 174 | - // $maj['create'] contient les directives propres a la premiere creation de base |
|
| 175 | - // c'est une operation derogatoire qui fait aboutir directement dans la version_cible |
|
| 176 | - if (isset($maj['create'])){ |
|
| 177 | - if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])){ |
|
| 178 | - // installation : on ne fait que l'operation create |
|
| 179 | - $maj = array("init"=>$maj['create']); |
|
| 180 | - // et on lui ajoute un appel a inc/config |
|
| 181 | - // pour creer les metas par defaut |
|
| 182 | - $config = charger_fonction('config','inc'); |
|
| 183 | - $maj[$version_cible] = array(array($config)); |
|
| 184 | - } |
|
| 185 | - // dans tous les cas enlever cet index du tableau |
|
| 186 | - unset($maj['create']); |
|
| 187 | - } |
|
| 188 | - // si init, deja dans le bon ordre |
|
| 189 | - if (!isset($maj['init'])){ |
|
| 190 | - include_spip('inc/plugin'); // pour spip_version_compare |
|
| 191 | - uksort($maj,'spip_version_compare'); |
|
| 192 | - } |
|
| 174 | + // $maj['create'] contient les directives propres a la premiere creation de base |
|
| 175 | + // c'est une operation derogatoire qui fait aboutir directement dans la version_cible |
|
| 176 | + if (isset($maj['create'])){ |
|
| 177 | + if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])){ |
|
| 178 | + // installation : on ne fait que l'operation create |
|
| 179 | + $maj = array("init"=>$maj['create']); |
|
| 180 | + // et on lui ajoute un appel a inc/config |
|
| 181 | + // pour creer les metas par defaut |
|
| 182 | + $config = charger_fonction('config','inc'); |
|
| 183 | + $maj[$version_cible] = array(array($config)); |
|
| 184 | + } |
|
| 185 | + // dans tous les cas enlever cet index du tableau |
|
| 186 | + unset($maj['create']); |
|
| 187 | + } |
|
| 188 | + // si init, deja dans le bon ordre |
|
| 189 | + if (!isset($maj['init'])){ |
|
| 190 | + include_spip('inc/plugin'); // pour spip_version_compare |
|
| 191 | + uksort($maj,'spip_version_compare'); |
|
| 192 | + } |
|
| 193 | 193 | |
| 194 | - // la redirection se fait par defaut sur la page d'administration des plugins |
|
| 195 | - // sauf lorsque nous sommes sur l'installation de SPIP |
|
| 196 | - // ou define _REDIRECT_MAJ_PLUGIN |
|
| 197 | - $redirect = (defined('_REDIRECT_MAJ_PLUGIN')?_REDIRECT_MAJ_PLUGIN:generer_url_ecrire('admin_plugin')); |
|
| 198 | - if (defined('_ECRIRE_INSTALL')) { |
|
| 199 | - $redirect = parametre_url(generer_url_ecrire('install'),'etape', _request('etape')); |
|
| 200 | - } |
|
| 194 | + // la redirection se fait par defaut sur la page d'administration des plugins |
|
| 195 | + // sauf lorsque nous sommes sur l'installation de SPIP |
|
| 196 | + // ou define _REDIRECT_MAJ_PLUGIN |
|
| 197 | + $redirect = (defined('_REDIRECT_MAJ_PLUGIN')?_REDIRECT_MAJ_PLUGIN:generer_url_ecrire('admin_plugin')); |
|
| 198 | + if (defined('_ECRIRE_INSTALL')) { |
|
| 199 | + $redirect = parametre_url(generer_url_ecrire('install'),'etape', _request('etape')); |
|
| 200 | + } |
|
| 201 | 201 | |
| 202 | - $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect); |
|
| 203 | - if ($res) { |
|
| 204 | - if (!is_array($res)) |
|
| 205 | - spip_log("Pb d'acces SQL a la mise a jour","maj."._LOG_INFO_ERREUR); |
|
| 206 | - else { |
|
| 207 | - echo "<p>"._T('avis_operation_echec') . ' ' . join(' ', $res)."</p>"; |
|
| 208 | - } |
|
| 209 | - } |
|
| 210 | - } |
|
| 202 | + $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect); |
|
| 203 | + if ($res) { |
|
| 204 | + if (!is_array($res)) |
|
| 205 | + spip_log("Pb d'acces SQL a la mise a jour","maj."._LOG_INFO_ERREUR); |
|
| 206 | + else { |
|
| 207 | + echo "<p>"._T('avis_operation_echec') . ' ' . join(' ', $res)."</p>"; |
|
| 208 | + } |
|
| 209 | + } |
|
| 210 | + } |
|
| 211 | 211 | } |
| 212 | 212 | |
| 213 | 213 | /** |
@@ -221,17 +221,17 @@ discard block |
||
| 221 | 221 | * @return void |
| 222 | 222 | */ |
| 223 | 223 | function relance_maj($meta,$table,$redirect=''){ |
| 224 | - include_spip('inc/headers'); |
|
| 225 | - if (!$redirect){ |
|
| 226 | - // recuperer la valeur installee en cours |
|
| 227 | - // on la tronque numeriquement, elle ne sert pas reellement |
|
| 228 | - // sauf pour verifier que ce n'est pas oui ou non |
|
| 229 | - // sinon is_numeric va echouer sur un numero de version 1.2.3 |
|
| 230 | - $installee = intval($GLOBALS[$table][$meta]); |
|
| 231 | - $redirect = generer_url_ecrire('upgrade',"reinstall=$installee&meta=$meta&table=$table",true); |
|
| 232 | - } |
|
| 233 | - echo redirige_formulaire($redirect); |
|
| 234 | - exit(); |
|
| 224 | + include_spip('inc/headers'); |
|
| 225 | + if (!$redirect){ |
|
| 226 | + // recuperer la valeur installee en cours |
|
| 227 | + // on la tronque numeriquement, elle ne sert pas reellement |
|
| 228 | + // sauf pour verifier que ce n'est pas oui ou non |
|
| 229 | + // sinon is_numeric va echouer sur un numero de version 1.2.3 |
|
| 230 | + $installee = intval($GLOBALS[$table][$meta]); |
|
| 231 | + $redirect = generer_url_ecrire('upgrade',"reinstall=$installee&meta=$meta&table=$table",true); |
|
| 232 | + } |
|
| 233 | + echo redirige_formulaire($redirect); |
|
| 234 | + exit(); |
|
| 235 | 235 | } |
| 236 | 236 | |
| 237 | 237 | /** |
@@ -244,21 +244,21 @@ discard block |
||
| 244 | 244 | * @return |
| 245 | 245 | */ |
| 246 | 246 | function maj_debut_page($installee,$meta,$table){ |
| 247 | - static $done = false; |
|
| 248 | - if ($done) return; |
|
| 249 | - include_spip('inc/minipres'); |
|
| 250 | - @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure |
|
| 251 | - $timeout = _UPGRADE_TIME_OUT*2; |
|
| 252 | - $titre = _T('titre_page_upgrade'); |
|
| 253 | - $balise_img = charger_filtre('balise_img'); |
|
| 254 | - $titre .= $balise_img(chemin_image('searching.gif')); |
|
| 255 | - echo ( install_debut_html($titre)); |
|
| 256 | - // script de rechargement auto sur timeout |
|
| 257 | - $redirect = generer_url_ecrire('upgrade',"reinstall=$installee&meta=$meta&table=$table",true); |
|
| 258 | - echo http_script("window.setTimeout('location.href=\"".$redirect."\";',".($timeout*1000).")"); |
|
| 259 | - echo "<div style='text-align: left'>\n"; |
|
| 260 | - ob_flush();flush(); |
|
| 261 | - $done = true; |
|
| 247 | + static $done = false; |
|
| 248 | + if ($done) return; |
|
| 249 | + include_spip('inc/minipres'); |
|
| 250 | + @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure |
|
| 251 | + $timeout = _UPGRADE_TIME_OUT*2; |
|
| 252 | + $titre = _T('titre_page_upgrade'); |
|
| 253 | + $balise_img = charger_filtre('balise_img'); |
|
| 254 | + $titre .= $balise_img(chemin_image('searching.gif')); |
|
| 255 | + echo ( install_debut_html($titre)); |
|
| 256 | + // script de rechargement auto sur timeout |
|
| 257 | + $redirect = generer_url_ecrire('upgrade',"reinstall=$installee&meta=$meta&table=$table",true); |
|
| 258 | + echo http_script("window.setTimeout('location.href=\"".$redirect."\";',".($timeout*1000).")"); |
|
| 259 | + echo "<div style='text-align: left'>\n"; |
|
| 260 | + ob_flush();flush(); |
|
| 261 | + $done = true; |
|
| 262 | 262 | } |
| 263 | 263 | |
| 264 | 264 | define('_UPGRADE_TIME_OUT', 20); |
@@ -298,46 +298,46 @@ discard block |
||
| 298 | 298 | */ |
| 299 | 299 | function maj_while($installee, $cible, $maj, $meta='', $table='meta', $redirect='', $debut_page = false) |
| 300 | 300 | { |
| 301 | - # inclusions pour que les procedures d'upgrade disposent des fonctions de base |
|
| 302 | - include_spip('base/create'); |
|
| 303 | - include_spip('base/abstract_sql'); |
|
| 304 | - $trouver_table = charger_fonction('trouver_table','base'); |
|
| 305 | - include_spip('inc/plugin'); // pour spip_version_compare |
|
| 306 | - $n = 0; |
|
| 307 | - $time = time(); |
|
| 308 | - // definir le timeout qui peut etre utilise dans les fonctions |
|
| 309 | - // de maj qui durent trop longtemps |
|
| 310 | - define('_TIME_OUT',$time+_UPGRADE_TIME_OUT); |
|
| 301 | + # inclusions pour que les procedures d'upgrade disposent des fonctions de base |
|
| 302 | + include_spip('base/create'); |
|
| 303 | + include_spip('base/abstract_sql'); |
|
| 304 | + $trouver_table = charger_fonction('trouver_table','base'); |
|
| 305 | + include_spip('inc/plugin'); // pour spip_version_compare |
|
| 306 | + $n = 0; |
|
| 307 | + $time = time(); |
|
| 308 | + // definir le timeout qui peut etre utilise dans les fonctions |
|
| 309 | + // de maj qui durent trop longtemps |
|
| 310 | + define('_TIME_OUT',$time+_UPGRADE_TIME_OUT); |
|
| 311 | 311 | |
| 312 | - reset($maj); |
|
| 313 | - while (list($v,)=each($maj)) { |
|
| 314 | - // si une maj pour cette version |
|
| 315 | - if ($v=='init' OR |
|
| 316 | - (spip_version_compare($v,$installee,'>') |
|
| 317 | - AND spip_version_compare($v,$cible,'<='))) { |
|
| 318 | - if ($debut_page) |
|
| 319 | - maj_debut_page($v,$meta,$table); |
|
| 320 | - echo "MAJ $v"; |
|
| 321 | - $etape = serie_alter($v, $maj[$v], $meta, $table, $redirect); |
|
| 322 | - $trouver_table(''); // vider le cache des descriptions de table |
|
| 323 | - # echec sur une etape en cours ? |
|
| 324 | - # on sort |
|
| 325 | - if ($etape) return array($v, $etape); |
|
| 326 | - $n = time() - $time; |
|
| 327 | - spip_log( "$table $meta: $v en $n secondes",'maj.'._LOG_INFO_IMPORTANTE); |
|
| 328 | - if ($meta) ecrire_meta($meta, $installee=$v,'oui', $table); |
|
| 329 | - echo "<br />"; |
|
| 330 | - } |
|
| 331 | - if (time() >= _TIME_OUT) { |
|
| 332 | - relance_maj($meta,$table,$redirect); |
|
| 333 | - } |
|
| 334 | - } |
|
| 335 | - $trouver_table(''); // vider le cache des descriptions de table |
|
| 336 | - // indispensable pour les chgt de versions qui n'ecrivent pas en base |
|
| 337 | - // tant pis pour la redondance eventuelle avec ci-dessus |
|
| 338 | - if ($meta) ecrire_meta($meta, $cible,'oui',$table); |
|
| 339 | - spip_log( "MAJ terminee. $meta: $installee",'maj.'._LOG_INFO_IMPORTANTE); |
|
| 340 | - return array(); |
|
| 312 | + reset($maj); |
|
| 313 | + while (list($v,)=each($maj)) { |
|
| 314 | + // si une maj pour cette version |
|
| 315 | + if ($v=='init' OR |
|
| 316 | + (spip_version_compare($v,$installee,'>') |
|
| 317 | + AND spip_version_compare($v,$cible,'<='))) { |
|
| 318 | + if ($debut_page) |
|
| 319 | + maj_debut_page($v,$meta,$table); |
|
| 320 | + echo "MAJ $v"; |
|
| 321 | + $etape = serie_alter($v, $maj[$v], $meta, $table, $redirect); |
|
| 322 | + $trouver_table(''); // vider le cache des descriptions de table |
|
| 323 | + # echec sur une etape en cours ? |
|
| 324 | + # on sort |
|
| 325 | + if ($etape) return array($v, $etape); |
|
| 326 | + $n = time() - $time; |
|
| 327 | + spip_log( "$table $meta: $v en $n secondes",'maj.'._LOG_INFO_IMPORTANTE); |
|
| 328 | + if ($meta) ecrire_meta($meta, $installee=$v,'oui', $table); |
|
| 329 | + echo "<br />"; |
|
| 330 | + } |
|
| 331 | + if (time() >= _TIME_OUT) { |
|
| 332 | + relance_maj($meta,$table,$redirect); |
|
| 333 | + } |
|
| 334 | + } |
|
| 335 | + $trouver_table(''); // vider le cache des descriptions de table |
|
| 336 | + // indispensable pour les chgt de versions qui n'ecrivent pas en base |
|
| 337 | + // tant pis pour la redondance eventuelle avec ci-dessus |
|
| 338 | + if ($meta) ecrire_meta($meta, $cible,'oui',$table); |
|
| 339 | + spip_log( "MAJ terminee. $meta: $installee",'maj.'._LOG_INFO_IMPORTANTE); |
|
| 340 | + return array(); |
|
| 341 | 341 | } |
| 342 | 342 | |
| 343 | 343 | /** |
@@ -359,45 +359,45 @@ discard block |
||
| 359 | 359 | * @return int |
| 360 | 360 | */ |
| 361 | 361 | function serie_alter($serie, $q = array(), $meta='', $table='meta', $redirect='') { |
| 362 | - $meta2 = $meta . '_maj_' . $serie; |
|
| 363 | - $etape = intval(@$GLOBALS[$table][$meta2]); |
|
| 364 | - foreach ($q as $i => $r) { |
|
| 365 | - if ($i >= $etape) { |
|
| 366 | - $msg = "maj $table $meta2 etape $i"; |
|
| 367 | - if (is_array($r) |
|
| 368 | - AND function_exists($f = array_shift($r))) { |
|
| 369 | - spip_log( "$msg: $f " . join(',',$r),'maj.'._LOG_INFO_IMPORTANTE); |
|
| 370 | - // pour les fonctions atomiques sql_xx |
|
| 371 | - // on enregistre le meta avant de lancer la fonction, |
|
| 372 | - // de maniere a eviter de boucler sur timeout |
|
| 373 | - // mais pour les fonctions complexes, |
|
| 374 | - // il faut les rejouer jusqu'a achevement. |
|
| 375 | - // C'est a elle d'assurer qu'elles progressent a chaque rappel |
|
| 376 | - if (strncmp($f,"sql_",4)==0) |
|
| 377 | - ecrire_meta($meta2, $i+1, 'non', $table); |
|
| 378 | - echo " <span title='$i'>.</span>"; |
|
| 379 | - call_user_func_array($f, $r); |
|
| 380 | - // si temps imparti depasse, on relance sans ecrire en meta |
|
| 381 | - // car on est peut etre sorti sur timeout si c'est une fonction longue |
|
| 382 | - if (time() >= _TIME_OUT) { |
|
| 383 | - relance_maj($meta,$table,$redirect); |
|
| 384 | - } |
|
| 385 | - ecrire_meta($meta2, $i+1, 'non', $table); |
|
| 386 | - spip_log( "$meta2: ok", 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 387 | - } |
|
| 388 | - else { |
|
| 389 | - if (!is_array($r)) |
|
| 390 | - spip_log("maj $i format incorrect","maj."._LOG_ERREUR); |
|
| 391 | - else |
|
| 392 | - spip_log("maj $i fonction $f non definie","maj."._LOG_ERREUR); |
|
| 393 | - // en cas d'erreur serieuse, on s'arrete |
|
| 394 | - // mais on permet de passer par dessus en rechargeant la page. |
|
| 395 | - return $i+1; |
|
| 396 | - } |
|
| 397 | - } |
|
| 398 | - } |
|
| 399 | - effacer_meta($meta2, $table); |
|
| 400 | - return 0; |
|
| 362 | + $meta2 = $meta . '_maj_' . $serie; |
|
| 363 | + $etape = intval(@$GLOBALS[$table][$meta2]); |
|
| 364 | + foreach ($q as $i => $r) { |
|
| 365 | + if ($i >= $etape) { |
|
| 366 | + $msg = "maj $table $meta2 etape $i"; |
|
| 367 | + if (is_array($r) |
|
| 368 | + AND function_exists($f = array_shift($r))) { |
|
| 369 | + spip_log( "$msg: $f " . join(',',$r),'maj.'._LOG_INFO_IMPORTANTE); |
|
| 370 | + // pour les fonctions atomiques sql_xx |
|
| 371 | + // on enregistre le meta avant de lancer la fonction, |
|
| 372 | + // de maniere a eviter de boucler sur timeout |
|
| 373 | + // mais pour les fonctions complexes, |
|
| 374 | + // il faut les rejouer jusqu'a achevement. |
|
| 375 | + // C'est a elle d'assurer qu'elles progressent a chaque rappel |
|
| 376 | + if (strncmp($f,"sql_",4)==0) |
|
| 377 | + ecrire_meta($meta2, $i+1, 'non', $table); |
|
| 378 | + echo " <span title='$i'>.</span>"; |
|
| 379 | + call_user_func_array($f, $r); |
|
| 380 | + // si temps imparti depasse, on relance sans ecrire en meta |
|
| 381 | + // car on est peut etre sorti sur timeout si c'est une fonction longue |
|
| 382 | + if (time() >= _TIME_OUT) { |
|
| 383 | + relance_maj($meta,$table,$redirect); |
|
| 384 | + } |
|
| 385 | + ecrire_meta($meta2, $i+1, 'non', $table); |
|
| 386 | + spip_log( "$meta2: ok", 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 387 | + } |
|
| 388 | + else { |
|
| 389 | + if (!is_array($r)) |
|
| 390 | + spip_log("maj $i format incorrect","maj."._LOG_ERREUR); |
|
| 391 | + else |
|
| 392 | + spip_log("maj $i fonction $f non definie","maj."._LOG_ERREUR); |
|
| 393 | + // en cas d'erreur serieuse, on s'arrete |
|
| 394 | + // mais on permet de passer par dessus en rechargeant la page. |
|
| 395 | + return $i+1; |
|
| 396 | + } |
|
| 397 | + } |
|
| 398 | + } |
|
| 399 | + effacer_meta($meta2, $table); |
|
| 400 | + return 0; |
|
| 401 | 401 | } |
| 402 | 402 | |
| 403 | 403 | |
@@ -407,49 +407,49 @@ discard block |
||
| 407 | 407 | |
| 408 | 408 | // http://doc.spip.org/@upgrade_types_documents |
| 409 | 409 | function upgrade_types_documents() { |
| 410 | - if (include_spip('base/medias') |
|
| 411 | - AND function_exists('creer_base_types_doc')) |
|
| 412 | - creer_base_types_doc(); |
|
| 410 | + if (include_spip('base/medias') |
|
| 411 | + AND function_exists('creer_base_types_doc')) |
|
| 412 | + creer_base_types_doc(); |
|
| 413 | 413 | } |
| 414 | 414 | |
| 415 | 415 | // http://doc.spip.org/@upgrade_test |
| 416 | 416 | function upgrade_test() { |
| 417 | - sql_drop_table("spip_test", true); |
|
| 418 | - sql_create("spip_test", array('a' => 'int')); |
|
| 419 | - sql_alter("TABLE spip_test ADD b INT"); |
|
| 420 | - sql_insertq('spip_test', array('b' => 1), array('field'=>array('b' => 'int'))); |
|
| 421 | - $result = sql_select('b', "spip_test"); |
|
| 422 | - // ne pas garder le resultat de la requete sinon sqlite3 |
|
| 423 | - // ne peut pas supprimer la table spip_test lors du sql_alter qui suit |
|
| 424 | - // car cette table serait alors 'verouillee' |
|
| 425 | - $result = $result?true:false; |
|
| 426 | - sql_alter("TABLE spip_test DROP b"); |
|
| 427 | - return $result; |
|
| 417 | + sql_drop_table("spip_test", true); |
|
| 418 | + sql_create("spip_test", array('a' => 'int')); |
|
| 419 | + sql_alter("TABLE spip_test ADD b INT"); |
|
| 420 | + sql_insertq('spip_test', array('b' => 1), array('field'=>array('b' => 'int'))); |
|
| 421 | + $result = sql_select('b', "spip_test"); |
|
| 422 | + // ne pas garder le resultat de la requete sinon sqlite3 |
|
| 423 | + // ne peut pas supprimer la table spip_test lors du sql_alter qui suit |
|
| 424 | + // car cette table serait alors 'verouillee' |
|
| 425 | + $result = $result?true:false; |
|
| 426 | + sql_alter("TABLE spip_test DROP b"); |
|
| 427 | + return $result; |
|
| 428 | 428 | } |
| 429 | 429 | |
| 430 | 430 | // pour versions <= 1.926 |
| 431 | 431 | // http://doc.spip.org/@maj_version |
| 432 | 432 | function maj_version ($version, $test = true) { |
| 433 | - if ($test) { |
|
| 434 | - if ($version>=1.922) |
|
| 435 | - ecrire_meta('version_installee', $version, 'oui'); |
|
| 436 | - else { |
|
| 437 | - // on le fait manuellement, car ecrire_meta utilise le champs impt qui est absent sur les vieilles versions |
|
| 438 | - $GLOBALS['meta']['version_installee'] = $version; |
|
| 439 | - sql_updateq('spip_meta', array('valeur' => $version), "nom=" . sql_quote('version_installee') ); |
|
| 440 | - } |
|
| 441 | - spip_log( "mise a jour de la base en $version","maj."._LOG_INFO_IMPORTANTE); |
|
| 442 | - } else { |
|
| 443 | - echo _T('alerte_maj_impossible', array('version' => $version)); |
|
| 444 | - exit; |
|
| 445 | - } |
|
| 433 | + if ($test) { |
|
| 434 | + if ($version>=1.922) |
|
| 435 | + ecrire_meta('version_installee', $version, 'oui'); |
|
| 436 | + else { |
|
| 437 | + // on le fait manuellement, car ecrire_meta utilise le champs impt qui est absent sur les vieilles versions |
|
| 438 | + $GLOBALS['meta']['version_installee'] = $version; |
|
| 439 | + sql_updateq('spip_meta', array('valeur' => $version), "nom=" . sql_quote('version_installee') ); |
|
| 440 | + } |
|
| 441 | + spip_log( "mise a jour de la base en $version","maj."._LOG_INFO_IMPORTANTE); |
|
| 442 | + } else { |
|
| 443 | + echo _T('alerte_maj_impossible', array('version' => $version)); |
|
| 444 | + exit; |
|
| 445 | + } |
|
| 446 | 446 | } |
| 447 | 447 | |
| 448 | 448 | // pour versions <= 1.926 |
| 449 | 449 | // http://doc.spip.org/@upgrade_vers |
| 450 | 450 | function upgrade_vers($version, $version_installee, $version_cible = 0){ |
| 451 | - return ($version_installee<$version |
|
| 452 | - AND (($version_cible>=$version) OR ($version_cible==0)) |
|
| 453 | - ); |
|
| 451 | + return ($version_installee<$version |
|
| 452 | + AND (($version_cible>=$version) OR ($version_cible==0)) |
|
| 453 | + ); |
|
| 454 | 454 | } |
| 455 | 455 | ?> |
@@ -62,120 +62,120 @@ |
||
| 62 | 62 | * |
| 63 | 63 | **/ |
| 64 | 64 | function base_trouver_table_dist($nom, $serveur='', $table_spip = true){ |
| 65 | - static $nom_cache_desc_sql=array(); |
|
| 66 | - global $tables_principales, $tables_auxiliaires, $table_des_tables; |
|
| 67 | - |
|
| 68 | - if (!spip_connect($serveur) |
|
| 69 | - OR !preg_match('/^[a-zA-Z0-9._-]*/',$nom)) |
|
| 70 | - return null; |
|
| 71 | - |
|
| 72 | - $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; |
|
| 73 | - $objets_sql = lister_tables_objets_sql("::md5"); |
|
| 74 | - |
|
| 75 | - // le nom du cache depend du serveur mais aussi du nom de la db et du prefixe |
|
| 76 | - // ce qui permet une auto invalidation en cas de modif manuelle du fichier |
|
| 77 | - // de connexion, et tout risque d'ambiguite |
|
| 78 | - if (!isset($nom_cache_desc_sql[$serveur][$objets_sql])){ |
|
| 79 | - $nom_cache_desc_sql[$serveur][$objets_sql] = |
|
| 80 | - _DIR_CACHE . 'sql_desc_' |
|
| 81 | - . ($serveur ? "{$serveur}_":"") |
|
| 82 | - . substr(md5($connexion['db'].":".$connexion['prefixe'].":$objets_sql"),0,8) |
|
| 83 | - .'.txt'; |
|
| 84 | - // nouveau nom de cache = nouvelle version en memoire |
|
| 85 | - unset($connexion['tables']); |
|
| 86 | - } |
|
| 87 | - |
|
| 88 | - // un appel avec $nom vide est une demande explicite de vidange du cache des descriptions |
|
| 89 | - if (!$nom){ |
|
| 90 | - spip_unlink($nom_cache_desc_sql[$serveur][$objets_sql]); |
|
| 91 | - $connexion['tables'] = array(); |
|
| 92 | - return null; |
|
| 93 | - } |
|
| 94 | - |
|
| 95 | - $nom_sql = $nom; |
|
| 96 | - if (preg_match('/\.(.*)$/', $nom, $s)) |
|
| 97 | - $nom_sql = $s[1]; |
|
| 98 | - else |
|
| 99 | - $nom_sql = $nom; |
|
| 100 | - |
|
| 101 | - $fdesc = $desc = ''; |
|
| 102 | - $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; |
|
| 103 | - |
|
| 104 | - // base sous SPIP: gerer les abreviations explicites des noms de table |
|
| 105 | - if ($connexion['spip_connect_version']) { |
|
| 106 | - if ($table_spip AND isset($table_des_tables[$nom])) { |
|
| 107 | - $nom = $table_des_tables[$nom]; |
|
| 108 | - $nom_sql = 'spip_' . $nom; |
|
| 109 | - } |
|
| 110 | - } |
|
| 111 | - |
|
| 112 | - // si c'est la premiere table qu'on cherche |
|
| 113 | - // et si on est pas explicitement en recalcul |
|
| 114 | - // on essaye de recharger le cache des decriptions de ce serveur |
|
| 115 | - // dans le fichier cache |
|
| 116 | - if (!isset($connexion['tables'][$nom_sql]) |
|
| 117 | - AND defined('_VAR_MODE') AND _VAR_MODE!=='recalcul' |
|
| 118 | - AND (!isset($connexion['tables']) OR !$connexion['tables'])) { |
|
| 119 | - if (lire_fichier($nom_cache_desc_sql[$serveur][$objets_sql],$desc_cache) |
|
| 120 | - AND $desc_cache=unserialize($desc_cache)) |
|
| 121 | - $connexion['tables'] = $desc_cache; |
|
| 122 | - } |
|
| 123 | - if ($table_spip AND !isset($connexion['tables'][$nom_sql])) { |
|
| 124 | - |
|
| 125 | - if (isset($tables_principales[$nom_sql])) |
|
| 126 | - $fdesc = $tables_principales[$nom_sql]; |
|
| 127 | - // meme si pas d'abreviation declaree, trouver la table spip_$nom |
|
| 128 | - // si c'est une table principale, |
|
| 129 | - // puisqu'on le fait aussi pour les tables auxiliaires |
|
| 130 | - elseif ($nom_sql==$nom AND isset($tables_principales['spip_' .$nom])){ |
|
| 131 | - $nom_sql = 'spip_' . $nom; |
|
| 132 | - $fdesc = &$tables_principales[$nom_sql]; |
|
| 133 | - } |
|
| 134 | - elseif (isset($tables_auxiliaires[$n=$nom]) |
|
| 135 | - OR isset($tables_auxiliaires[$n='spip_'.$nom])) { |
|
| 136 | - $nom_sql = $n; |
|
| 137 | - $fdesc = &$tables_auxiliaires[$n]; |
|
| 138 | - } # table locale a cote de SPIP, comme non SPIP: |
|
| 139 | - } |
|
| 140 | - if (!isset($connexion['tables'][$nom_sql])) { |
|
| 141 | - |
|
| 142 | - // La *vraie* base a la priorite |
|
| 143 | - $desc = sql_showtable($nom_sql, $table_spip, $serveur); |
|
| 144 | - if (!$desc OR !$desc['field']) { |
|
| 145 | - if (!$fdesc) { |
|
| 146 | - spip_log("trouver_table: table inconnue '$serveur' '$nom'",_LOG_INFO_IMPORTANTE); |
|
| 147 | - return null; |
|
| 148 | - } |
|
| 149 | - // on ne sait pas lire la structure de la table : |
|
| 150 | - // on retombe sur la description donnee dans les fichiers spip |
|
| 151 | - $desc = $fdesc; |
|
| 152 | - } |
|
| 153 | - else { |
|
| 154 | - $desc['exist'] = true; |
|
| 155 | - } |
|
| 156 | - |
|
| 157 | - $desc['table'] = $desc['table_sql'] = $nom_sql; |
|
| 158 | - $desc['connexion']= $serveur; |
|
| 159 | - |
|
| 160 | - // charger les infos declarees pour cette table |
|
| 161 | - // en lui passant les infos connues |
|
| 162 | - // $desc est prioritaire pour la description de la table |
|
| 163 | - $desc = array_merge(lister_tables_objets_sql($nom_sql,$desc),$desc); |
|
| 164 | - |
|
| 165 | - // si tables_objets_sql est bien fini d'init, on peut cacher |
|
| 166 | - $connexion['tables'][$nom_sql] = $desc; |
|
| 167 | - $res = &$connexion['tables'][$nom_sql]; |
|
| 168 | - // une nouvelle table a ete decrite |
|
| 169 | - // mettons donc a jour le cache des descriptions de ce serveur |
|
| 170 | - if (is_writeable(_DIR_CACHE)) |
|
| 171 | - ecrire_fichier($nom_cache_desc_sql[$serveur][$objets_sql],serialize($connexion['tables']),true); |
|
| 172 | - } |
|
| 173 | - else |
|
| 174 | - $res = &$connexion['tables'][$nom_sql]; |
|
| 175 | - |
|
| 176 | - // toujours retourner $nom dans id_table |
|
| 177 | - $res['id_table']=$nom; |
|
| 178 | - |
|
| 179 | - return $res; |
|
| 65 | + static $nom_cache_desc_sql=array(); |
|
| 66 | + global $tables_principales, $tables_auxiliaires, $table_des_tables; |
|
| 67 | + |
|
| 68 | + if (!spip_connect($serveur) |
|
| 69 | + OR !preg_match('/^[a-zA-Z0-9._-]*/',$nom)) |
|
| 70 | + return null; |
|
| 71 | + |
|
| 72 | + $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; |
|
| 73 | + $objets_sql = lister_tables_objets_sql("::md5"); |
|
| 74 | + |
|
| 75 | + // le nom du cache depend du serveur mais aussi du nom de la db et du prefixe |
|
| 76 | + // ce qui permet une auto invalidation en cas de modif manuelle du fichier |
|
| 77 | + // de connexion, et tout risque d'ambiguite |
|
| 78 | + if (!isset($nom_cache_desc_sql[$serveur][$objets_sql])){ |
|
| 79 | + $nom_cache_desc_sql[$serveur][$objets_sql] = |
|
| 80 | + _DIR_CACHE . 'sql_desc_' |
|
| 81 | + . ($serveur ? "{$serveur}_":"") |
|
| 82 | + . substr(md5($connexion['db'].":".$connexion['prefixe'].":$objets_sql"),0,8) |
|
| 83 | + .'.txt'; |
|
| 84 | + // nouveau nom de cache = nouvelle version en memoire |
|
| 85 | + unset($connexion['tables']); |
|
| 86 | + } |
|
| 87 | + |
|
| 88 | + // un appel avec $nom vide est une demande explicite de vidange du cache des descriptions |
|
| 89 | + if (!$nom){ |
|
| 90 | + spip_unlink($nom_cache_desc_sql[$serveur][$objets_sql]); |
|
| 91 | + $connexion['tables'] = array(); |
|
| 92 | + return null; |
|
| 93 | + } |
|
| 94 | + |
|
| 95 | + $nom_sql = $nom; |
|
| 96 | + if (preg_match('/\.(.*)$/', $nom, $s)) |
|
| 97 | + $nom_sql = $s[1]; |
|
| 98 | + else |
|
| 99 | + $nom_sql = $nom; |
|
| 100 | + |
|
| 101 | + $fdesc = $desc = ''; |
|
| 102 | + $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0]; |
|
| 103 | + |
|
| 104 | + // base sous SPIP: gerer les abreviations explicites des noms de table |
|
| 105 | + if ($connexion['spip_connect_version']) { |
|
| 106 | + if ($table_spip AND isset($table_des_tables[$nom])) { |
|
| 107 | + $nom = $table_des_tables[$nom]; |
|
| 108 | + $nom_sql = 'spip_' . $nom; |
|
| 109 | + } |
|
| 110 | + } |
|
| 111 | + |
|
| 112 | + // si c'est la premiere table qu'on cherche |
|
| 113 | + // et si on est pas explicitement en recalcul |
|
| 114 | + // on essaye de recharger le cache des decriptions de ce serveur |
|
| 115 | + // dans le fichier cache |
|
| 116 | + if (!isset($connexion['tables'][$nom_sql]) |
|
| 117 | + AND defined('_VAR_MODE') AND _VAR_MODE!=='recalcul' |
|
| 118 | + AND (!isset($connexion['tables']) OR !$connexion['tables'])) { |
|
| 119 | + if (lire_fichier($nom_cache_desc_sql[$serveur][$objets_sql],$desc_cache) |
|
| 120 | + AND $desc_cache=unserialize($desc_cache)) |
|
| 121 | + $connexion['tables'] = $desc_cache; |
|
| 122 | + } |
|
| 123 | + if ($table_spip AND !isset($connexion['tables'][$nom_sql])) { |
|
| 124 | + |
|
| 125 | + if (isset($tables_principales[$nom_sql])) |
|
| 126 | + $fdesc = $tables_principales[$nom_sql]; |
|
| 127 | + // meme si pas d'abreviation declaree, trouver la table spip_$nom |
|
| 128 | + // si c'est une table principale, |
|
| 129 | + // puisqu'on le fait aussi pour les tables auxiliaires |
|
| 130 | + elseif ($nom_sql==$nom AND isset($tables_principales['spip_' .$nom])){ |
|
| 131 | + $nom_sql = 'spip_' . $nom; |
|
| 132 | + $fdesc = &$tables_principales[$nom_sql]; |
|
| 133 | + } |
|
| 134 | + elseif (isset($tables_auxiliaires[$n=$nom]) |
|
| 135 | + OR isset($tables_auxiliaires[$n='spip_'.$nom])) { |
|
| 136 | + $nom_sql = $n; |
|
| 137 | + $fdesc = &$tables_auxiliaires[$n]; |
|
| 138 | + } # table locale a cote de SPIP, comme non SPIP: |
|
| 139 | + } |
|
| 140 | + if (!isset($connexion['tables'][$nom_sql])) { |
|
| 141 | + |
|
| 142 | + // La *vraie* base a la priorite |
|
| 143 | + $desc = sql_showtable($nom_sql, $table_spip, $serveur); |
|
| 144 | + if (!$desc OR !$desc['field']) { |
|
| 145 | + if (!$fdesc) { |
|
| 146 | + spip_log("trouver_table: table inconnue '$serveur' '$nom'",_LOG_INFO_IMPORTANTE); |
|
| 147 | + return null; |
|
| 148 | + } |
|
| 149 | + // on ne sait pas lire la structure de la table : |
|
| 150 | + // on retombe sur la description donnee dans les fichiers spip |
|
| 151 | + $desc = $fdesc; |
|
| 152 | + } |
|
| 153 | + else { |
|
| 154 | + $desc['exist'] = true; |
|
| 155 | + } |
|
| 156 | + |
|
| 157 | + $desc['table'] = $desc['table_sql'] = $nom_sql; |
|
| 158 | + $desc['connexion']= $serveur; |
|
| 159 | + |
|
| 160 | + // charger les infos declarees pour cette table |
|
| 161 | + // en lui passant les infos connues |
|
| 162 | + // $desc est prioritaire pour la description de la table |
|
| 163 | + $desc = array_merge(lister_tables_objets_sql($nom_sql,$desc),$desc); |
|
| 164 | + |
|
| 165 | + // si tables_objets_sql est bien fini d'init, on peut cacher |
|
| 166 | + $connexion['tables'][$nom_sql] = $desc; |
|
| 167 | + $res = &$connexion['tables'][$nom_sql]; |
|
| 168 | + // une nouvelle table a ete decrite |
|
| 169 | + // mettons donc a jour le cache des descriptions de ce serveur |
|
| 170 | + if (is_writeable(_DIR_CACHE)) |
|
| 171 | + ecrire_fichier($nom_cache_desc_sql[$serveur][$objets_sql],serialize($connexion['tables']),true); |
|
| 172 | + } |
|
| 173 | + else |
|
| 174 | + $res = &$connexion['tables'][$nom_sql]; |
|
| 175 | + |
|
| 176 | + // toujours retourner $nom dans id_table |
|
| 177 | + $res['id_table']=$nom; |
|
| 178 | + |
|
| 179 | + return $res; |
|
| 180 | 180 | } |
| 181 | 181 | ?> |
@@ -26,108 +26,108 @@ discard block |
||
| 26 | 26 | |
| 27 | 27 | // http://doc.spip.org/@spip_connect |
| 28 | 28 | function spip_connect($serveur='', $version='') { |
| 29 | - global $connexions, $spip_sql_version; |
|
| 30 | - |
|
| 31 | - $serveur = !is_string($serveur) ? '' : strtolower($serveur); |
|
| 32 | - $index = $serveur ? $serveur : 0; |
|
| 33 | - if (!$version) $version = $spip_sql_version; |
|
| 34 | - if (isset($connexions[$index][$version])) return $connexions[$index]; |
|
| 35 | - |
|
| 36 | - include_spip('base/abstract_sql'); |
|
| 37 | - $install = (_request('exec') == 'install'); |
|
| 38 | - |
|
| 39 | - // Premiere connexion ? |
|
| 40 | - if (!($old = isset($connexions[$index]))) { |
|
| 41 | - $f = (!preg_match('/^[\w\.]*$/', $serveur)) |
|
| 42 | - ? '' // nom de serveur mal ecrit |
|
| 43 | - : ($serveur ? |
|
| 44 | - ( _DIR_CONNECT. $serveur . '.php') // serveur externe |
|
| 45 | - : (_FILE_CONNECT ? _FILE_CONNECT // serveur principal ok |
|
| 46 | - : ($install ? _FILE_CONNECT_TMP // init du serveur principal |
|
| 47 | - : ''))); // installation pas faite |
|
| 48 | - |
|
| 49 | - unset($GLOBALS['db_ok']); |
|
| 50 | - unset($GLOBALS['spip_connect_version']); |
|
| 51 | - if ($f) { |
|
| 52 | - if (is_readable($f)) { |
|
| 53 | - include($f); |
|
| 54 | - } elseif ($serveur AND !$install) { |
|
| 55 | - // chercher une declaration de serveur dans le path |
|
| 56 | - // qui pourra un jour servir a declarer des bases sqlite |
|
| 57 | - // par des plugins. Et sert aussi aux boucles POUR. |
|
| 58 | - find_in_path("$serveur.php",'connect/',true); |
|
| 59 | - } |
|
| 60 | - } |
|
| 61 | - if (!isset($GLOBALS['db_ok'])) { |
|
| 62 | - // fera mieux la prochaine fois |
|
| 63 | - if ($install) return false; |
|
| 64 | - if ($f AND is_readable($f)) |
|
| 65 | - spip_log("spip_connect: fichier de connexion '$f' OK.", _LOG_INFO_IMPORTANTE); |
|
| 66 | - else |
|
| 67 | - spip_log("spip_connect: fichier de connexion '$f' non trouve", _LOG_INFO_IMPORTANTE); |
|
| 68 | - spip_log("spip_connect: echec connexion ou serveur $index mal defini dans '$f'.", _LOG_HS); |
|
| 69 | - // ne plus reessayer si ce n'est pas l'install |
|
| 70 | - return $connexions[$index]=false; |
|
| 71 | - } |
|
| 72 | - $connexions[$index] = $GLOBALS['db_ok']; |
|
| 73 | - } |
|
| 74 | - // si la connexion a deja ete tentee mais a echoue, le dire! |
|
| 75 | - if (!$connexions[$index]) return false; |
|
| 76 | - |
|
| 77 | - // la connexion a reussi ou etait deja faite. |
|
| 78 | - // chargement de la version du jeu de fonctions |
|
| 79 | - // si pas dans le fichier par defaut |
|
| 80 | - $type = $GLOBALS['db_ok']['type']; |
|
| 81 | - $jeu = 'spip_' . $type .'_functions_' . $version; |
|
| 82 | - if (!isset($GLOBALS[$jeu])) { |
|
| 83 | - if (!find_in_path($type . '_' . $version . '.php', 'req/', true)){ |
|
| 84 | - spip_log("spip_connect: serveur $index version '$version' non defini pour '$type'", _LOG_HS); |
|
| 85 | - // ne plus reessayer |
|
| 86 | - return $connexions[$index][$version] = array(); |
|
| 87 | - } |
|
| 88 | - } |
|
| 89 | - $connexions[$index][$version] = $GLOBALS[$jeu]; |
|
| 90 | - if ($old) return $connexions[$index]; |
|
| 91 | - |
|
| 92 | - $connexions[$index]['spip_connect_version'] = isset($GLOBALS['spip_connect_version']) ? $GLOBALS['spip_connect_version'] : 0; |
|
| 93 | - |
|
| 94 | - // initialisation de l'alphabet utilise dans les connexions SQL |
|
| 95 | - // si l'installation l'a determine. |
|
| 96 | - // Celui du serveur principal l'impose aux serveurs secondaires |
|
| 97 | - // s'ils le connaissent |
|
| 98 | - |
|
| 99 | - if (!$serveur) { |
|
| 100 | - $charset = spip_connect_main($GLOBALS[$jeu]); |
|
| 101 | - if (!$charset) { |
|
| 102 | - unset($connexions[$index]); |
|
| 103 | - spip_log("spip_connect: absence de charset", _LOG_AVERTISSEMENT); |
|
| 104 | - return false; |
|
| 105 | - } |
|
| 106 | - } else { |
|
| 107 | - // spip_meta n'existe pas toujours dans la base |
|
| 108 | - // C'est le cas d'un dump sqlite par exemple |
|
| 109 | - if ($connexions[$index]['spip_connect_version'] |
|
| 110 | - AND sql_showtable('spip_meta', true, $serveur) |
|
| 111 | - AND $r = sql_getfetsel('valeur', 'spip_meta', "nom='charset_sql_connexion'",'','','','',$serveur)) |
|
| 112 | - $charset = $r; |
|
| 113 | - else $charset = -1; |
|
| 114 | - } |
|
| 115 | - if ($charset != -1) { |
|
| 116 | - $f = $GLOBALS[$jeu]['set_charset']; |
|
| 117 | - if (function_exists($f)) |
|
| 118 | - $f($charset, $serveur); |
|
| 119 | - } |
|
| 120 | - return $connexions[$index]; |
|
| 29 | + global $connexions, $spip_sql_version; |
|
| 30 | + |
|
| 31 | + $serveur = !is_string($serveur) ? '' : strtolower($serveur); |
|
| 32 | + $index = $serveur ? $serveur : 0; |
|
| 33 | + if (!$version) $version = $spip_sql_version; |
|
| 34 | + if (isset($connexions[$index][$version])) return $connexions[$index]; |
|
| 35 | + |
|
| 36 | + include_spip('base/abstract_sql'); |
|
| 37 | + $install = (_request('exec') == 'install'); |
|
| 38 | + |
|
| 39 | + // Premiere connexion ? |
|
| 40 | + if (!($old = isset($connexions[$index]))) { |
|
| 41 | + $f = (!preg_match('/^[\w\.]*$/', $serveur)) |
|
| 42 | + ? '' // nom de serveur mal ecrit |
|
| 43 | + : ($serveur ? |
|
| 44 | + ( _DIR_CONNECT. $serveur . '.php') // serveur externe |
|
| 45 | + : (_FILE_CONNECT ? _FILE_CONNECT // serveur principal ok |
|
| 46 | + : ($install ? _FILE_CONNECT_TMP // init du serveur principal |
|
| 47 | + : ''))); // installation pas faite |
|
| 48 | + |
|
| 49 | + unset($GLOBALS['db_ok']); |
|
| 50 | + unset($GLOBALS['spip_connect_version']); |
|
| 51 | + if ($f) { |
|
| 52 | + if (is_readable($f)) { |
|
| 53 | + include($f); |
|
| 54 | + } elseif ($serveur AND !$install) { |
|
| 55 | + // chercher une declaration de serveur dans le path |
|
| 56 | + // qui pourra un jour servir a declarer des bases sqlite |
|
| 57 | + // par des plugins. Et sert aussi aux boucles POUR. |
|
| 58 | + find_in_path("$serveur.php",'connect/',true); |
|
| 59 | + } |
|
| 60 | + } |
|
| 61 | + if (!isset($GLOBALS['db_ok'])) { |
|
| 62 | + // fera mieux la prochaine fois |
|
| 63 | + if ($install) return false; |
|
| 64 | + if ($f AND is_readable($f)) |
|
| 65 | + spip_log("spip_connect: fichier de connexion '$f' OK.", _LOG_INFO_IMPORTANTE); |
|
| 66 | + else |
|
| 67 | + spip_log("spip_connect: fichier de connexion '$f' non trouve", _LOG_INFO_IMPORTANTE); |
|
| 68 | + spip_log("spip_connect: echec connexion ou serveur $index mal defini dans '$f'.", _LOG_HS); |
|
| 69 | + // ne plus reessayer si ce n'est pas l'install |
|
| 70 | + return $connexions[$index]=false; |
|
| 71 | + } |
|
| 72 | + $connexions[$index] = $GLOBALS['db_ok']; |
|
| 73 | + } |
|
| 74 | + // si la connexion a deja ete tentee mais a echoue, le dire! |
|
| 75 | + if (!$connexions[$index]) return false; |
|
| 76 | + |
|
| 77 | + // la connexion a reussi ou etait deja faite. |
|
| 78 | + // chargement de la version du jeu de fonctions |
|
| 79 | + // si pas dans le fichier par defaut |
|
| 80 | + $type = $GLOBALS['db_ok']['type']; |
|
| 81 | + $jeu = 'spip_' . $type .'_functions_' . $version; |
|
| 82 | + if (!isset($GLOBALS[$jeu])) { |
|
| 83 | + if (!find_in_path($type . '_' . $version . '.php', 'req/', true)){ |
|
| 84 | + spip_log("spip_connect: serveur $index version '$version' non defini pour '$type'", _LOG_HS); |
|
| 85 | + // ne plus reessayer |
|
| 86 | + return $connexions[$index][$version] = array(); |
|
| 87 | + } |
|
| 88 | + } |
|
| 89 | + $connexions[$index][$version] = $GLOBALS[$jeu]; |
|
| 90 | + if ($old) return $connexions[$index]; |
|
| 91 | + |
|
| 92 | + $connexions[$index]['spip_connect_version'] = isset($GLOBALS['spip_connect_version']) ? $GLOBALS['spip_connect_version'] : 0; |
|
| 93 | + |
|
| 94 | + // initialisation de l'alphabet utilise dans les connexions SQL |
|
| 95 | + // si l'installation l'a determine. |
|
| 96 | + // Celui du serveur principal l'impose aux serveurs secondaires |
|
| 97 | + // s'ils le connaissent |
|
| 98 | + |
|
| 99 | + if (!$serveur) { |
|
| 100 | + $charset = spip_connect_main($GLOBALS[$jeu]); |
|
| 101 | + if (!$charset) { |
|
| 102 | + unset($connexions[$index]); |
|
| 103 | + spip_log("spip_connect: absence de charset", _LOG_AVERTISSEMENT); |
|
| 104 | + return false; |
|
| 105 | + } |
|
| 106 | + } else { |
|
| 107 | + // spip_meta n'existe pas toujours dans la base |
|
| 108 | + // C'est le cas d'un dump sqlite par exemple |
|
| 109 | + if ($connexions[$index]['spip_connect_version'] |
|
| 110 | + AND sql_showtable('spip_meta', true, $serveur) |
|
| 111 | + AND $r = sql_getfetsel('valeur', 'spip_meta', "nom='charset_sql_connexion'",'','','','',$serveur)) |
|
| 112 | + $charset = $r; |
|
| 113 | + else $charset = -1; |
|
| 114 | + } |
|
| 115 | + if ($charset != -1) { |
|
| 116 | + $f = $GLOBALS[$jeu]['set_charset']; |
|
| 117 | + if (function_exists($f)) |
|
| 118 | + $f($charset, $serveur); |
|
| 119 | + } |
|
| 120 | + return $connexions[$index]; |
|
| 121 | 121 | } |
| 122 | 122 | |
| 123 | 123 | function spip_sql_erreur($serveur='') |
| 124 | 124 | { |
| 125 | - $connexion = spip_connect($serveur); |
|
| 126 | - $e = sql_errno($serveur); |
|
| 127 | - $t = (isset($connexion['type']) ? $connexion['type'] : 'sql'); |
|
| 128 | - $m = "Erreur $e de $t: " . sql_error($serveur) . "\n" . $connexion['last']; |
|
| 129 | - $f = $t . $serveur; |
|
| 130 | - spip_log($m, $f.'.'._LOG_ERREUR); |
|
| 125 | + $connexion = spip_connect($serveur); |
|
| 126 | + $e = sql_errno($serveur); |
|
| 127 | + $t = (isset($connexion['type']) ? $connexion['type'] : 'sql'); |
|
| 128 | + $m = "Erreur $e de $t: " . sql_error($serveur) . "\n" . $connexion['last']; |
|
| 129 | + $f = $t . $serveur; |
|
| 130 | + spip_log($m, $f.'.'._LOG_ERREUR); |
|
| 131 | 131 | } |
| 132 | 132 | |
| 133 | 133 | // Cette fonction ne doit etre appelee qu'a travers la fonction sql_serveur |
@@ -137,14 +137,14 @@ discard block |
||
| 137 | 137 | |
| 138 | 138 | // http://doc.spip.org/@spip_connect_sql |
| 139 | 139 | function spip_connect_sql($version, $ins='', $serveur='', $cont=false) { |
| 140 | - $desc = spip_connect($serveur, $version); |
|
| 141 | - if (function_exists($f = @$desc[$version][$ins])) return $f; |
|
| 142 | - if ($cont) return $desc; |
|
| 143 | - if ($ins) |
|
| 144 | - spip_log("Le serveur '$serveur' version $version n'a pas '$ins'", _LOG_ERREUR); |
|
| 145 | - include_spip('inc/minipres'); |
|
| 146 | - echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique')); |
|
| 147 | - exit; |
|
| 140 | + $desc = spip_connect($serveur, $version); |
|
| 141 | + if (function_exists($f = @$desc[$version][$ins])) return $f; |
|
| 142 | + if ($cont) return $desc; |
|
| 143 | + if ($ins) |
|
| 144 | + spip_log("Le serveur '$serveur' version $version n'a pas '$ins'", _LOG_ERREUR); |
|
| 145 | + include_spip('inc/minipres'); |
|
| 146 | + echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique')); |
|
| 147 | + exit; |
|
| 148 | 148 | } |
| 149 | 149 | |
| 150 | 150 | /** |
@@ -167,54 +167,54 @@ discard block |
||
| 167 | 167 | * @return array |
| 168 | 168 | */ |
| 169 | 169 | function spip_connect_db($host, $port, $login, $pass, $db='', $type='mysql', $prefixe='', $auth='') { |
| 170 | - global $db_ok; |
|
| 171 | - |
|
| 172 | - // temps avant nouvelle tentative de connexion |
|
| 173 | - // suite a une connection echouee |
|
| 174 | - if (!defined('_CONNECT_RETRY_DELAY')) |
|
| 175 | - define('_CONNECT_RETRY_DELAY',30); |
|
| 176 | - |
|
| 177 | - $f = ""; |
|
| 178 | - // un fichier de identifiant par combinaison (type,host,port,db) |
|
| 179 | - // pour ne pas declarer tout indisponible d'un coup |
|
| 180 | - // si en cours d'installation ou si db=@test@ on ne pose rien |
|
| 181 | - // car c'est un test de connexion |
|
| 182 | - if (!defined('_ECRIRE_INSTALL') AND !$db=="@test@") |
|
| 183 | - $f = _DIR_TMP . $type . '.' . substr(md5($host.$port.$db),0,8) . '.out'; |
|
| 184 | - elseif ($db=='@test@') |
|
| 185 | - $db = ''; |
|
| 186 | - |
|
| 187 | - if ($f |
|
| 188 | - AND @file_exists($f) |
|
| 189 | - AND (time() - @filemtime($f) < _CONNECT_RETRY_DELAY)) { |
|
| 190 | - spip_log( "Echec : $f recent. Pas de tentative de connexion", _LOG_HS); |
|
| 191 | - return; |
|
| 192 | - } |
|
| 193 | - |
|
| 194 | - if (!$prefixe) |
|
| 195 | - $prefixe = isset($GLOBALS['table_prefix']) |
|
| 196 | - ? $GLOBALS['table_prefix'] : $db; |
|
| 197 | - $h = charger_fonction($type, 'req', true); |
|
| 198 | - if (!$h) { |
|
| 199 | - spip_log( "les requetes $type ne sont pas fournies", _LOG_HS); |
|
| 200 | - return; |
|
| 201 | - } |
|
| 202 | - if ($g = $h($host, $port, $login, $pass, $db, $prefixe)) { |
|
| 203 | - |
|
| 204 | - if (!is_array($auth)) { |
|
| 205 | - // compatibilite version 0.7 initiale |
|
| 206 | - $g['ldap'] = $auth; |
|
| 207 | - $auth = array('ldap' => $auth); |
|
| 208 | - } |
|
| 209 | - $g['authentification'] = $auth; |
|
| 210 | - $g['type'] = $type; |
|
| 211 | - return $db_ok = $g; |
|
| 212 | - } |
|
| 213 | - // En cas d'indisponibilite du serveur, eviter de le bombarder |
|
| 214 | - if ($f) { |
|
| 215 | - @touch($f); |
|
| 216 | - spip_log( "Echec connexion serveur $type : host[$host] port[$port] login[$login] base[$db]", $type.'.'._LOG_HS); |
|
| 217 | - } |
|
| 170 | + global $db_ok; |
|
| 171 | + |
|
| 172 | + // temps avant nouvelle tentative de connexion |
|
| 173 | + // suite a une connection echouee |
|
| 174 | + if (!defined('_CONNECT_RETRY_DELAY')) |
|
| 175 | + define('_CONNECT_RETRY_DELAY',30); |
|
| 176 | + |
|
| 177 | + $f = ""; |
|
| 178 | + // un fichier de identifiant par combinaison (type,host,port,db) |
|
| 179 | + // pour ne pas declarer tout indisponible d'un coup |
|
| 180 | + // si en cours d'installation ou si db=@test@ on ne pose rien |
|
| 181 | + // car c'est un test de connexion |
|
| 182 | + if (!defined('_ECRIRE_INSTALL') AND !$db=="@test@") |
|
| 183 | + $f = _DIR_TMP . $type . '.' . substr(md5($host.$port.$db),0,8) . '.out'; |
|
| 184 | + elseif ($db=='@test@') |
|
| 185 | + $db = ''; |
|
| 186 | + |
|
| 187 | + if ($f |
|
| 188 | + AND @file_exists($f) |
|
| 189 | + AND (time() - @filemtime($f) < _CONNECT_RETRY_DELAY)) { |
|
| 190 | + spip_log( "Echec : $f recent. Pas de tentative de connexion", _LOG_HS); |
|
| 191 | + return; |
|
| 192 | + } |
|
| 193 | + |
|
| 194 | + if (!$prefixe) |
|
| 195 | + $prefixe = isset($GLOBALS['table_prefix']) |
|
| 196 | + ? $GLOBALS['table_prefix'] : $db; |
|
| 197 | + $h = charger_fonction($type, 'req', true); |
|
| 198 | + if (!$h) { |
|
| 199 | + spip_log( "les requetes $type ne sont pas fournies", _LOG_HS); |
|
| 200 | + return; |
|
| 201 | + } |
|
| 202 | + if ($g = $h($host, $port, $login, $pass, $db, $prefixe)) { |
|
| 203 | + |
|
| 204 | + if (!is_array($auth)) { |
|
| 205 | + // compatibilite version 0.7 initiale |
|
| 206 | + $g['ldap'] = $auth; |
|
| 207 | + $auth = array('ldap' => $auth); |
|
| 208 | + } |
|
| 209 | + $g['authentification'] = $auth; |
|
| 210 | + $g['type'] = $type; |
|
| 211 | + return $db_ok = $g; |
|
| 212 | + } |
|
| 213 | + // En cas d'indisponibilite du serveur, eviter de le bombarder |
|
| 214 | + if ($f) { |
|
| 215 | + @touch($f); |
|
| 216 | + spip_log( "Echec connexion serveur $type : host[$host] port[$port] login[$login] base[$db]", $type.'.'._LOG_HS); |
|
| 217 | + } |
|
| 218 | 218 | } |
| 219 | 219 | |
| 220 | 220 | // Premiere connexion au serveur principal: |
@@ -233,25 +233,25 @@ discard block |
||
| 233 | 233 | // http://doc.spip.org/@spip_connect_main |
| 234 | 234 | function spip_connect_main($connexion) |
| 235 | 235 | { |
| 236 | - if ($GLOBALS['spip_connect_version']< 0.1 AND _DIR_RESTREINT){ |
|
| 237 | - include_spip('inc/headers'); |
|
| 238 | - redirige_url_ecrire('upgrade', 'reinstall=oui'); |
|
| 239 | - } |
|
| 240 | - |
|
| 241 | - if (!($f = $connexion['select'])) return false; |
|
| 242 | - // en cas d'erreur select retourne la requette (is_string=true donc) |
|
| 243 | - if (!$r = $f('valeur','spip_meta', "nom='charset_sql_connexion'") |
|
| 244 | - OR is_string($r)) |
|
| 245 | - return false; |
|
| 246 | - if (!($f = $connexion['fetch'])) return false; |
|
| 247 | - $r = $f($r); |
|
| 248 | - return ($r['valeur'] ? $r['valeur'] : -1); |
|
| 236 | + if ($GLOBALS['spip_connect_version']< 0.1 AND _DIR_RESTREINT){ |
|
| 237 | + include_spip('inc/headers'); |
|
| 238 | + redirige_url_ecrire('upgrade', 'reinstall=oui'); |
|
| 239 | + } |
|
| 240 | + |
|
| 241 | + if (!($f = $connexion['select'])) return false; |
|
| 242 | + // en cas d'erreur select retourne la requette (is_string=true donc) |
|
| 243 | + if (!$r = $f('valeur','spip_meta', "nom='charset_sql_connexion'") |
|
| 244 | + OR is_string($r)) |
|
| 245 | + return false; |
|
| 246 | + if (!($f = $connexion['fetch'])) return false; |
|
| 247 | + $r = $f($r); |
|
| 248 | + return ($r['valeur'] ? $r['valeur'] : -1); |
|
| 249 | 249 | } |
| 250 | 250 | |
| 251 | 251 | // compatibilite |
| 252 | 252 | function spip_connect_ldap($serveur='') { |
| 253 | - include_spip('auth/ldap'); |
|
| 254 | - return auth_ldap_connect($serveur); |
|
| 253 | + include_spip('auth/ldap'); |
|
| 254 | + return auth_ldap_connect($serveur); |
|
| 255 | 255 | } |
| 256 | 256 | |
| 257 | 257 | // Echappement d'une valeur (num, string, array) sous forme de chaine PHP |
@@ -259,23 +259,23 @@ discard block |
||
| 259 | 259 | // Usage sql un peu deprecie, a remplacer par sql_quote() |
| 260 | 260 | // http://doc.spip.org/@_q |
| 261 | 261 | function _q ($a) { |
| 262 | - return (is_numeric($a)) ? strval($a) : |
|
| 263 | - (!is_array($a) ? ("'" . addslashes($a) . "'") |
|
| 264 | - : join(",", array_map('_q', $a))); |
|
| 262 | + return (is_numeric($a)) ? strval($a) : |
|
| 263 | + (!is_array($a) ? ("'" . addslashes($a) . "'") |
|
| 264 | + : join(",", array_map('_q', $a))); |
|
| 265 | 265 | } |
| 266 | 266 | |
| 267 | 267 | |
| 268 | 268 | // Recuperer le nom de la table de jointure xxxx sur l'objet yyyy |
| 269 | 269 | // http://doc.spip.org/@table_jointure |
| 270 | 270 | function table_jointure($x, $y) { |
| 271 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 272 | - $xdesc = $trouver_table(table_objet($x)); |
|
| 273 | - $ydesc = $trouver_table(table_objet($y)); |
|
| 274 | - $ix = @$xdesc['key']["PRIMARY KEY"]; |
|
| 275 | - $iy = @$ydesc['key']["PRIMARY KEY"]; |
|
| 276 | - if ($table = $ydesc['tables_jointures'][$ix]) return $table; |
|
| 277 | - if ($table = $xdesc['tables_jointures'][$iy]) return $table; |
|
| 278 | - return ''; |
|
| 271 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 272 | + $xdesc = $trouver_table(table_objet($x)); |
|
| 273 | + $ydesc = $trouver_table(table_objet($y)); |
|
| 274 | + $ix = @$xdesc['key']["PRIMARY KEY"]; |
|
| 275 | + $iy = @$ydesc['key']["PRIMARY KEY"]; |
|
| 276 | + if ($table = $ydesc['tables_jointures'][$ix]) return $table; |
|
| 277 | + if ($table = $xdesc['tables_jointures'][$iy]) return $table; |
|
| 278 | + return ''; |
|
| 279 | 279 | } |
| 280 | 280 | |
| 281 | 281 | /** |
@@ -288,29 +288,29 @@ discard block |
||
| 288 | 288 | * @return array |
| 289 | 289 | */ |
| 290 | 290 | function query_echappe_textes($query){ |
| 291 | - static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3"); |
|
| 292 | - $query = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query); |
|
| 293 | - if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S",$query,$textes)){ |
|
| 294 | - $textes = reset($textes); // indice 0 du match |
|
| 295 | - switch(count($textes)){ |
|
| 296 | - case 0:$replace=array();break; |
|
| 297 | - case 1:$replace=array('%1$s');break; |
|
| 298 | - case 2:$replace=array('%1$s','%2$s');break; |
|
| 299 | - case 3:$replace=array('%1$s','%2$s','%3$s');break; |
|
| 300 | - case 4:$replace=array('%1$s','%2$s','%3$s','%4$s');break; |
|
| 301 | - case 5:$replace=array('%1$s','%2$s','%3$s','%4$s','%5$s');break; |
|
| 302 | - default: |
|
| 303 | - $replace = range(1,count($textes)); |
|
| 304 | - $replace = '%'.implode('$s,%',$replace).'$s'; |
|
| 305 | - $replace = explode(',',$replace); |
|
| 306 | - break; |
|
| 307 | - } |
|
| 308 | - $query = str_replace($textes,$replace,$query); |
|
| 309 | - } |
|
| 310 | - else |
|
| 311 | - $textes = array(); |
|
| 312 | - |
|
| 313 | - return array($query, $textes); |
|
| 291 | + static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3"); |
|
| 292 | + $query = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query); |
|
| 293 | + if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S",$query,$textes)){ |
|
| 294 | + $textes = reset($textes); // indice 0 du match |
|
| 295 | + switch(count($textes)){ |
|
| 296 | + case 0:$replace=array();break; |
|
| 297 | + case 1:$replace=array('%1$s');break; |
|
| 298 | + case 2:$replace=array('%1$s','%2$s');break; |
|
| 299 | + case 3:$replace=array('%1$s','%2$s','%3$s');break; |
|
| 300 | + case 4:$replace=array('%1$s','%2$s','%3$s','%4$s');break; |
|
| 301 | + case 5:$replace=array('%1$s','%2$s','%3$s','%4$s','%5$s');break; |
|
| 302 | + default: |
|
| 303 | + $replace = range(1,count($textes)); |
|
| 304 | + $replace = '%'.implode('$s,%',$replace).'$s'; |
|
| 305 | + $replace = explode(',',$replace); |
|
| 306 | + break; |
|
| 307 | + } |
|
| 308 | + $query = str_replace($textes,$replace,$query); |
|
| 309 | + } |
|
| 310 | + else |
|
| 311 | + $textes = array(); |
|
| 312 | + |
|
| 313 | + return array($query, $textes); |
|
| 314 | 314 | } |
| 315 | 315 | |
| 316 | 316 | /** |
@@ -322,37 +322,37 @@ discard block |
||
| 322 | 322 | * @return string |
| 323 | 323 | */ |
| 324 | 324 | function query_reinjecte_textes($query, $textes){ |
| 325 | - static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3"); |
|
| 326 | - # debug de la substitution |
|
| 327 | - #if (($c1=substr_count($query,"%"))!=($c2=count($textes))){ |
|
| 328 | - # spip_log("$c1 ::". $query,"tradquery"._LOG_ERREUR); |
|
| 329 | - # spip_log("$c2 ::". var_export($textes,1),"tradquery"._LOG_ERREUR); |
|
| 330 | - # spip_log("ini ::". $qi,"tradquery"._LOG_ERREUR); |
|
| 331 | - #} |
|
| 332 | - switch (count($textes)){ |
|
| 333 | - case 0:break; |
|
| 334 | - case 1:$query=sprintf($query,$textes[0]);break; |
|
| 335 | - case 2:$query=sprintf($query,$textes[0],$textes[1]);break; |
|
| 336 | - case 3:$query=sprintf($query,$textes[0],$textes[1],$textes[2]);break; |
|
| 337 | - case 4:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3]);break; |
|
| 338 | - case 5:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3],$textes[4]);break; |
|
| 339 | - default: |
|
| 340 | - array_unshift($textes,$query); |
|
| 341 | - $query = call_user_func_array('sprintf',$textes); |
|
| 342 | - break; |
|
| 343 | - } |
|
| 344 | - |
|
| 345 | - $query = str_replace(array_values($codeEchappements), array_keys($codeEchappements), $query); |
|
| 346 | - |
|
| 347 | - return $query; |
|
| 325 | + static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3"); |
|
| 326 | + # debug de la substitution |
|
| 327 | + #if (($c1=substr_count($query,"%"))!=($c2=count($textes))){ |
|
| 328 | + # spip_log("$c1 ::". $query,"tradquery"._LOG_ERREUR); |
|
| 329 | + # spip_log("$c2 ::". var_export($textes,1),"tradquery"._LOG_ERREUR); |
|
| 330 | + # spip_log("ini ::". $qi,"tradquery"._LOG_ERREUR); |
|
| 331 | + #} |
|
| 332 | + switch (count($textes)){ |
|
| 333 | + case 0:break; |
|
| 334 | + case 1:$query=sprintf($query,$textes[0]);break; |
|
| 335 | + case 2:$query=sprintf($query,$textes[0],$textes[1]);break; |
|
| 336 | + case 3:$query=sprintf($query,$textes[0],$textes[1],$textes[2]);break; |
|
| 337 | + case 4:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3]);break; |
|
| 338 | + case 5:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3],$textes[4]);break; |
|
| 339 | + default: |
|
| 340 | + array_unshift($textes,$query); |
|
| 341 | + $query = call_user_func_array('sprintf',$textes); |
|
| 342 | + break; |
|
| 343 | + } |
|
| 344 | + |
|
| 345 | + $query = str_replace(array_values($codeEchappements), array_keys($codeEchappements), $query); |
|
| 346 | + |
|
| 347 | + return $query; |
|
| 348 | 348 | } |
| 349 | 349 | |
| 350 | 350 | // Pour compatibilite. Ne plus utiliser. |
| 351 | 351 | // http://doc.spip.org/@spip_query |
| 352 | 352 | function spip_query($query, $serveur='') { |
| 353 | - global $spip_sql_version; |
|
| 354 | - $f = spip_connect_sql($spip_sql_version, 'query', $serveur, true); |
|
| 355 | - return function_exists($f) ? $f($query, $serveur) : false; |
|
| 353 | + global $spip_sql_version; |
|
| 354 | + $f = spip_connect_sql($spip_sql_version, 'query', $serveur, true); |
|
| 355 | + return function_exists($f) ? $f($query, $serveur) : false; |
|
| 356 | 356 | } |
| 357 | 357 | |
| 358 | 358 | ?> |
@@ -53,13 +53,13 @@ discard block |
||
| 53 | 53 | * |
| 54 | 54 | **/ |
| 55 | 55 | function sql_serveur($ins_sql='', $serveur='', $continue=false) { |
| 56 | - static $sql_serveur = array(); |
|
| 57 | - if (!isset($sql_serveur[$serveur][$ins_sql])){ |
|
| 58 | - $f = spip_connect_sql(sql_ABSTRACT_VERSION, $ins_sql, $serveur, $continue); |
|
| 59 | - if (!is_string($f) OR !$f) return $f; |
|
| 60 | - $sql_serveur[$serveur][$ins_sql] = $f; |
|
| 61 | - } |
|
| 62 | - return $sql_serveur[$serveur][$ins_sql]; |
|
| 56 | + static $sql_serveur = array(); |
|
| 57 | + if (!isset($sql_serveur[$serveur][$ins_sql])){ |
|
| 58 | + $f = spip_connect_sql(sql_ABSTRACT_VERSION, $ins_sql, $serveur, $continue); |
|
| 59 | + if (!is_string($f) OR !$f) return $f; |
|
| 60 | + $sql_serveur[$serveur][$ins_sql] = $f; |
|
| 61 | + } |
|
| 62 | + return $sql_serveur[$serveur][$ins_sql]; |
|
| 63 | 63 | } |
| 64 | 64 | |
| 65 | 65 | /** |
@@ -81,16 +81,16 @@ discard block |
||
| 81 | 81 | * Retourne le nom du charset si effectivement trouve, sinon false. |
| 82 | 82 | **/ |
| 83 | 83 | function sql_get_charset($charset, $serveur='', $option=true){ |
| 84 | - // le nom http du charset differe parfois du nom SQL utf-8 ==> utf8 etc. |
|
| 85 | - $desc = sql_serveur('', $serveur, true,true); |
|
| 86 | - $desc = $desc[sql_ABSTRACT_VERSION]; |
|
| 87 | - $c = $desc['charsets'][$charset]; |
|
| 88 | - if ($c) { |
|
| 89 | - if (function_exists($f=@$desc['get_charset'])) |
|
| 90 | - if ($f($c, $serveur, $option!==false)) return $c; |
|
| 91 | - } |
|
| 92 | - spip_log( "SPIP ne connait pas les Charsets disponibles sur le serveur $serveur. Le serveur choisira seul.", _LOG_AVERTISSEMENT); |
|
| 93 | - return false; |
|
| 84 | + // le nom http du charset differe parfois du nom SQL utf-8 ==> utf8 etc. |
|
| 85 | + $desc = sql_serveur('', $serveur, true,true); |
|
| 86 | + $desc = $desc[sql_ABSTRACT_VERSION]; |
|
| 87 | + $c = $desc['charsets'][$charset]; |
|
| 88 | + if ($c) { |
|
| 89 | + if (function_exists($f=@$desc['get_charset'])) |
|
| 90 | + if ($f($c, $serveur, $option!==false)) return $c; |
|
| 91 | + } |
|
| 92 | + spip_log( "SPIP ne connait pas les Charsets disponibles sur le serveur $serveur. Le serveur choisira seul.", _LOG_AVERTISSEMENT); |
|
| 93 | + return false; |
|
| 94 | 94 | } |
| 95 | 95 | |
| 96 | 96 | |
@@ -116,9 +116,9 @@ discard block |
||
| 116 | 116 | * Retourne true si elle reussie. |
| 117 | 117 | **/ |
| 118 | 118 | function sql_set_charset($charset,$serveur='', $option=true){ |
| 119 | - $f = sql_serveur('set_charset', $serveur, $option==='continue' OR $option===false); |
|
| 120 | - if (!is_string($f) OR !$f) return false; |
|
| 121 | - return $f($charset, $serveur, $option!==false); |
|
| 119 | + $f = sql_serveur('set_charset', $serveur, $option==='continue' OR $option===false); |
|
| 120 | + if (!is_string($f) OR !$f) return false; |
|
| 121 | + return $f($charset, $serveur, $option!==false); |
|
| 122 | 122 | } |
| 123 | 123 | |
| 124 | 124 | |
@@ -168,33 +168,33 @@ discard block |
||
| 168 | 168 | * |
| 169 | 169 | **/ |
| 170 | 170 | function sql_select ($select = array(), $from = array(), $where = array(), |
| 171 | - $groupby = array(), $orderby = array(), $limit = '', $having = array(), |
|
| 172 | - $serveur='', $option=true) { |
|
| 173 | - $f = sql_serveur('select', $serveur, $option==='continue' OR $option===false); |
|
| 174 | - if (!is_string($f) OR !$f) return false; |
|
| 175 | - |
|
| 176 | - $debug = (defined('_VAR_MODE') AND _VAR_MODE == 'debug'); |
|
| 177 | - if (($option !== false) AND !$debug) { |
|
| 178 | - $res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, is_array($option) ? true : $option); |
|
| 179 | - } else { |
|
| 180 | - $query = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false); |
|
| 181 | - if (!$option) return $query; |
|
| 182 | - // le debug, c'est pour ce qui a ete produit par le compilateur |
|
| 183 | - if (isset($GLOBALS['debug']['aucasou'])) { |
|
| 184 | - list($table, $id,) = $GLOBALS['debug']['aucasou']; |
|
| 185 | - $nom = $GLOBALS['debug_objets']['courant'] . $id; |
|
| 186 | - $GLOBALS['debug_objets']['requete'][$nom] = $query; |
|
| 187 | - } |
|
| 188 | - $res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, true); |
|
| 189 | - } |
|
| 190 | - |
|
| 191 | - // en cas d'erreur |
|
| 192 | - if (!is_string($res)) return $res; |
|
| 193 | - // denoncer l'erreur SQL dans sa version brute |
|
| 194 | - spip_sql_erreur($serveur); |
|
| 195 | - // idem dans sa version squelette (prefixe des tables non substitue) |
|
| 196 | - erreur_squelette(array(sql_errno($serveur), sql_error($serveur), $res), $option); |
|
| 197 | - return false; |
|
| 171 | + $groupby = array(), $orderby = array(), $limit = '', $having = array(), |
|
| 172 | + $serveur='', $option=true) { |
|
| 173 | + $f = sql_serveur('select', $serveur, $option==='continue' OR $option===false); |
|
| 174 | + if (!is_string($f) OR !$f) return false; |
|
| 175 | + |
|
| 176 | + $debug = (defined('_VAR_MODE') AND _VAR_MODE == 'debug'); |
|
| 177 | + if (($option !== false) AND !$debug) { |
|
| 178 | + $res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, is_array($option) ? true : $option); |
|
| 179 | + } else { |
|
| 180 | + $query = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false); |
|
| 181 | + if (!$option) return $query; |
|
| 182 | + // le debug, c'est pour ce qui a ete produit par le compilateur |
|
| 183 | + if (isset($GLOBALS['debug']['aucasou'])) { |
|
| 184 | + list($table, $id,) = $GLOBALS['debug']['aucasou']; |
|
| 185 | + $nom = $GLOBALS['debug_objets']['courant'] . $id; |
|
| 186 | + $GLOBALS['debug_objets']['requete'][$nom] = $query; |
|
| 187 | + } |
|
| 188 | + $res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, true); |
|
| 189 | + } |
|
| 190 | + |
|
| 191 | + // en cas d'erreur |
|
| 192 | + if (!is_string($res)) return $res; |
|
| 193 | + // denoncer l'erreur SQL dans sa version brute |
|
| 194 | + spip_sql_erreur($serveur); |
|
| 195 | + // idem dans sa version squelette (prefixe des tables non substitue) |
|
| 196 | + erreur_squelette(array(sql_errno($serveur), sql_error($serveur), $res), $option); |
|
| 197 | + return false; |
|
| 198 | 198 | } |
| 199 | 199 | |
| 200 | 200 | |
@@ -231,9 +231,9 @@ discard block |
||
| 231 | 231 | * |
| 232 | 232 | **/ |
| 233 | 233 | function sql_get_select($select = array(), $from = array(), $where = array(), |
| 234 | - $groupby = array(), $orderby = array(), $limit = '', $having = array(), |
|
| 235 | - $serveur='') { |
|
| 236 | - return sql_select ($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false); |
|
| 234 | + $groupby = array(), $orderby = array(), $limit = '', $having = array(), |
|
| 235 | + $serveur='') { |
|
| 236 | + return sql_select ($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false); |
|
| 237 | 237 | } |
| 238 | 238 | |
| 239 | 239 | |
@@ -267,13 +267,13 @@ discard block |
||
| 267 | 267 | * |
| 268 | 268 | **/ |
| 269 | 269 | function sql_countsel($from = array(), $where = array(), |
| 270 | - $groupby = array(), $having = array(), |
|
| 271 | - $serveur='', $option=true) { |
|
| 272 | - $f = sql_serveur('countsel', $serveur, $option==='continue' OR $option===false); |
|
| 273 | - if (!is_string($f) OR !$f) return false; |
|
| 274 | - $r = $f($from, $where, $groupby, $having, $serveur, $option!==false); |
|
| 275 | - if ($r===false) spip_sql_erreur($serveur); |
|
| 276 | - return $r; |
|
| 270 | + $groupby = array(), $having = array(), |
|
| 271 | + $serveur='', $option=true) { |
|
| 272 | + $f = sql_serveur('countsel', $serveur, $option==='continue' OR $option===false); |
|
| 273 | + if (!is_string($f) OR !$f) return false; |
|
| 274 | + $r = $f($from, $where, $groupby, $having, $serveur, $option!==false); |
|
| 275 | + if ($r===false) spip_sql_erreur($serveur); |
|
| 276 | + return $r; |
|
| 277 | 277 | } |
| 278 | 278 | |
| 279 | 279 | /** |
@@ -300,11 +300,11 @@ discard block |
||
| 300 | 300 | * Ce retour n'est pas pertinent pour savoir si l'operation est correctement realisee. |
| 301 | 301 | **/ |
| 302 | 302 | function sql_alter($q, $serveur='', $option=true) { |
| 303 | - $f = sql_serveur('alter', $serveur, $option==='continue' OR $option===false); |
|
| 304 | - if (!is_string($f) OR !$f) return false; |
|
| 305 | - $r = $f($q, $serveur, $option!==false); |
|
| 306 | - if ($r===false) spip_sql_erreur($serveur); |
|
| 307 | - return $r; |
|
| 303 | + $f = sql_serveur('alter', $serveur, $option==='continue' OR $option===false); |
|
| 304 | + if (!is_string($f) OR !$f) return false; |
|
| 305 | + $r = $f($q, $serveur, $option!==false); |
|
| 306 | + if ($r===false) spip_sql_erreur($serveur); |
|
| 307 | + return $r; |
|
| 308 | 308 | } |
| 309 | 309 | |
| 310 | 310 | /** |
@@ -327,9 +327,9 @@ discard block |
||
| 327 | 327 | * presentant une ligne de resultat d'une selection |
| 328 | 328 | */ |
| 329 | 329 | function sql_fetch($res, $serveur='', $option=true) { |
| 330 | - $f = sql_serveur('fetch', $serveur, $option==='continue' OR $option===false); |
|
| 331 | - if (!is_string($f) OR !$f) return false; |
|
| 332 | - return $f($res, NULL, $serveur, $option!==false); |
|
| 330 | + $f = sql_serveur('fetch', $serveur, $option==='continue' OR $option===false); |
|
| 331 | + if (!is_string($f) OR !$f) return false; |
|
| 332 | + return $f($res, NULL, $serveur, $option!==false); |
|
| 333 | 333 | } |
| 334 | 334 | |
| 335 | 335 | |
@@ -356,14 +356,14 @@ discard block |
||
| 356 | 356 | * presentant une ligne de resultat d'une selection |
| 357 | 357 | */ |
| 358 | 358 | function sql_fetch_all($res, $serveur='', $option=true){ |
| 359 | - $rows = array(); |
|
| 360 | - if (!$res) return $rows; |
|
| 361 | - $f = sql_serveur('fetch', $serveur, $option==='continue' OR $option===false); |
|
| 362 | - if (!is_string($f) OR !$f) return array(); |
|
| 363 | - while ($r = $f($res, NULL, $serveur, $option!==false)) |
|
| 364 | - $rows[] = $r; |
|
| 365 | - sql_free($res, $serveur); |
|
| 366 | - return $rows; |
|
| 359 | + $rows = array(); |
|
| 360 | + if (!$res) return $rows; |
|
| 361 | + $f = sql_serveur('fetch', $serveur, $option==='continue' OR $option===false); |
|
| 362 | + if (!is_string($f) OR !$f) return array(); |
|
| 363 | + while ($r = $f($res, NULL, $serveur, $option!==false)) |
|
| 364 | + $rows[] = $r; |
|
| 365 | + sql_free($res, $serveur); |
|
| 366 | + return $rows; |
|
| 367 | 367 | } |
| 368 | 368 | |
| 369 | 369 | /** |
@@ -391,11 +391,11 @@ discard block |
||
| 391 | 391 | * Operation effectuee (true), sinon false. |
| 392 | 392 | **/ |
| 393 | 393 | function sql_seek($res, $row_number, $serveur='', $option=true) { |
| 394 | - $f = sql_serveur('seek', $serveur, $option==='continue' OR $option===false); |
|
| 395 | - if (!is_string($f) OR !$f) return false; |
|
| 396 | - $r = $f($res, $row_number, $serveur, $option!==false); |
|
| 397 | - if ($r===false) spip_sql_erreur($serveur); |
|
| 398 | - return $r; |
|
| 394 | + $f = sql_serveur('seek', $serveur, $option==='continue' OR $option===false); |
|
| 395 | + if (!is_string($f) OR !$f) return false; |
|
| 396 | + $r = $f($res, $row_number, $serveur, $option!==false); |
|
| 397 | + if ($r===false) spip_sql_erreur($serveur); |
|
| 398 | + return $r; |
|
| 399 | 399 | } |
| 400 | 400 | |
| 401 | 401 | |
@@ -420,11 +420,11 @@ discard block |
||
| 420 | 420 | * False en cas d'erreur. |
| 421 | 421 | **/ |
| 422 | 422 | function sql_listdbs($serveur='', $option=true) { |
| 423 | - $f = sql_serveur('listdbs', $serveur, $option==='continue' OR $option===false); |
|
| 424 | - if (!is_string($f) OR !$f) return false; |
|
| 425 | - $r = $f($serveur); |
|
| 426 | - if ($r===false) spip_sql_erreur($serveur); |
|
| 427 | - return $r; |
|
| 423 | + $f = sql_serveur('listdbs', $serveur, $option==='continue' OR $option===false); |
|
| 424 | + if (!is_string($f) OR !$f) return false; |
|
| 425 | + $r = $f($serveur); |
|
| 426 | + if ($r===false) spip_sql_erreur($serveur); |
|
| 427 | + return $r; |
|
| 428 | 428 | } |
| 429 | 429 | |
| 430 | 430 | |
@@ -447,29 +447,29 @@ discard block |
||
| 447 | 447 | **/ |
| 448 | 448 | function sql_selectdb($nom, $serveur='', $option=true) |
| 449 | 449 | { |
| 450 | - $f = sql_serveur('selectdb', $serveur, $option==='continue' OR $option===false); |
|
| 451 | - if (!is_string($f) OR !$f) return false; |
|
| 452 | - $r = $f($nom, $serveur, $option!==false); |
|
| 453 | - if ($r===false) spip_sql_erreur($serveur); |
|
| 454 | - return $r; |
|
| 450 | + $f = sql_serveur('selectdb', $serveur, $option==='continue' OR $option===false); |
|
| 451 | + if (!is_string($f) OR !$f) return false; |
|
| 452 | + $r = $f($nom, $serveur, $option!==false); |
|
| 453 | + if ($r===false) spip_sql_erreur($serveur); |
|
| 454 | + return $r; |
|
| 455 | 455 | } |
| 456 | 456 | |
| 457 | 457 | // http://doc.spip.org/@sql_count |
| 458 | 458 | function sql_count($res, $serveur='', $option=true) |
| 459 | 459 | { |
| 460 | - $f = sql_serveur('count', $serveur, $option==='continue' OR $option===false); |
|
| 461 | - if (!is_string($f) OR !$f) return false; |
|
| 462 | - $r = $f($res, $serveur, $option!==false); |
|
| 463 | - if ($r===false) spip_sql_erreur($serveur); |
|
| 464 | - return $r; |
|
| 460 | + $f = sql_serveur('count', $serveur, $option==='continue' OR $option===false); |
|
| 461 | + if (!is_string($f) OR !$f) return false; |
|
| 462 | + $r = $f($res, $serveur, $option!==false); |
|
| 463 | + if ($r===false) spip_sql_erreur($serveur); |
|
| 464 | + return $r; |
|
| 465 | 465 | } |
| 466 | 466 | |
| 467 | 467 | // http://doc.spip.org/@sql_free |
| 468 | 468 | function sql_free($res, $serveur='', $option=true) |
| 469 | 469 | { |
| 470 | - $f = sql_serveur('free', $serveur, $option==='continue' OR $option===false); |
|
| 471 | - if (!is_string($f) OR !$f) return false; |
|
| 472 | - return $f($res); |
|
| 470 | + $f = sql_serveur('free', $serveur, $option==='continue' OR $option===false); |
|
| 471 | + if (!is_string($f) OR !$f) return false; |
|
| 472 | + return $f($res); |
|
| 473 | 473 | } |
| 474 | 474 | |
| 475 | 475 | // Cette fonction ne garantit pas une portabilite totale |
@@ -479,41 +479,41 @@ discard block |
||
| 479 | 479 | // http://doc.spip.org/@sql_insert |
| 480 | 480 | function sql_insert($table, $noms, $valeurs, $desc=array(), $serveur='', $option=true) |
| 481 | 481 | { |
| 482 | - $f = sql_serveur('insert', $serveur, $option==='continue' OR $option===false); |
|
| 483 | - if (!is_string($f) OR !$f) return false; |
|
| 484 | - $r = $f($table, $noms, $valeurs, $desc, $serveur, $option!==false); |
|
| 485 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 486 | - return $r; |
|
| 482 | + $f = sql_serveur('insert', $serveur, $option==='continue' OR $option===false); |
|
| 483 | + if (!is_string($f) OR !$f) return false; |
|
| 484 | + $r = $f($table, $noms, $valeurs, $desc, $serveur, $option!==false); |
|
| 485 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 486 | + return $r; |
|
| 487 | 487 | } |
| 488 | 488 | |
| 489 | 489 | // http://doc.spip.org/@sql_insertq |
| 490 | 490 | function sql_insertq($table, $couples=array(), $desc=array(), $serveur='', $option=true) |
| 491 | 491 | { |
| 492 | - $f = sql_serveur('insertq', $serveur, $option==='continue' OR $option===false); |
|
| 493 | - if (!is_string($f) OR !$f) return false; |
|
| 494 | - $r = $f($table, $couples, $desc, $serveur, $option!==false); |
|
| 495 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 496 | - return $r; |
|
| 492 | + $f = sql_serveur('insertq', $serveur, $option==='continue' OR $option===false); |
|
| 493 | + if (!is_string($f) OR !$f) return false; |
|
| 494 | + $r = $f($table, $couples, $desc, $serveur, $option!==false); |
|
| 495 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 496 | + return $r; |
|
| 497 | 497 | } |
| 498 | 498 | |
| 499 | 499 | // http://doc.spip.org/@sql_insertq_multi |
| 500 | 500 | function sql_insertq_multi($table, $couples=array(), $desc=array(), $serveur='', $option=true) |
| 501 | 501 | { |
| 502 | - $f = sql_serveur('insertq_multi', $serveur, $option==='continue' OR $option===false); |
|
| 503 | - if (!is_string($f) OR !$f) return false; |
|
| 504 | - $r = $f($table, $couples, $desc, $serveur, $option!==false); |
|
| 505 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 506 | - return $r; |
|
| 502 | + $f = sql_serveur('insertq_multi', $serveur, $option==='continue' OR $option===false); |
|
| 503 | + if (!is_string($f) OR !$f) return false; |
|
| 504 | + $r = $f($table, $couples, $desc, $serveur, $option!==false); |
|
| 505 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 506 | + return $r; |
|
| 507 | 507 | } |
| 508 | 508 | |
| 509 | 509 | // http://doc.spip.org/@sql_update |
| 510 | 510 | function sql_update($table, $exp, $where='', $desc=array(), $serveur='', $option=true) |
| 511 | 511 | { |
| 512 | - $f = sql_serveur('update', $serveur, $option==='continue' OR $option===false); |
|
| 513 | - if (!is_string($f) OR !$f) return false; |
|
| 514 | - $r = $f($table, $exp, $where, $desc, $serveur, $option!==false); |
|
| 515 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 516 | - return $r; |
|
| 512 | + $f = sql_serveur('update', $serveur, $option==='continue' OR $option===false); |
|
| 513 | + if (!is_string($f) OR !$f) return false; |
|
| 514 | + $r = $f($table, $exp, $where, $desc, $serveur, $option!==false); |
|
| 515 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 516 | + return $r; |
|
| 517 | 517 | } |
| 518 | 518 | |
| 519 | 519 | // Update est presque toujours appelee sur des constantes ou des dates |
@@ -522,63 +522,63 @@ discard block |
||
| 522 | 522 | // http://doc.spip.org/@sql_updateq |
| 523 | 523 | function sql_updateq($table, $exp, $where='', $desc=array(), $serveur='', $option=true) |
| 524 | 524 | { |
| 525 | - $f = sql_serveur('updateq', $serveur, $option==='continue' OR $option===false); |
|
| 526 | - if (!is_string($f) OR !$f) return false; |
|
| 527 | - $r = $f($table, $exp, $where, $desc, $serveur, $option!==false); |
|
| 528 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 529 | - return $r; |
|
| 525 | + $f = sql_serveur('updateq', $serveur, $option==='continue' OR $option===false); |
|
| 526 | + if (!is_string($f) OR !$f) return false; |
|
| 527 | + $r = $f($table, $exp, $where, $desc, $serveur, $option!==false); |
|
| 528 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 529 | + return $r; |
|
| 530 | 530 | } |
| 531 | 531 | |
| 532 | 532 | // http://doc.spip.org/@sql_delete |
| 533 | 533 | function sql_delete($table, $where='', $serveur='', $option=true) |
| 534 | 534 | { |
| 535 | - $f = sql_serveur('delete', $serveur, $option==='continue' OR $option===false); |
|
| 536 | - if (!is_string($f) OR !$f) return false; |
|
| 537 | - $r = $f($table, $where, $serveur, $option!==false); |
|
| 538 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 539 | - return $r; |
|
| 535 | + $f = sql_serveur('delete', $serveur, $option==='continue' OR $option===false); |
|
| 536 | + if (!is_string($f) OR !$f) return false; |
|
| 537 | + $r = $f($table, $where, $serveur, $option!==false); |
|
| 538 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 539 | + return $r; |
|
| 540 | 540 | } |
| 541 | 541 | |
| 542 | 542 | // http://doc.spip.org/@sql_replace |
| 543 | 543 | function sql_replace($table, $couples, $desc=array(), $serveur='', $option=true) |
| 544 | 544 | { |
| 545 | - $f = sql_serveur('replace', $serveur, $option==='continue' OR $option===false); |
|
| 546 | - if (!is_string($f) OR !$f) return false; |
|
| 547 | - $r = $f($table, $couples, $desc, $serveur, $option!==false); |
|
| 548 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 549 | - return $r; |
|
| 545 | + $f = sql_serveur('replace', $serveur, $option==='continue' OR $option===false); |
|
| 546 | + if (!is_string($f) OR !$f) return false; |
|
| 547 | + $r = $f($table, $couples, $desc, $serveur, $option!==false); |
|
| 548 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 549 | + return $r; |
|
| 550 | 550 | } |
| 551 | 551 | |
| 552 | 552 | |
| 553 | 553 | // http://doc.spip.org/@sql_replace_multi |
| 554 | 554 | function sql_replace_multi($table, $tab_couples, $desc=array(), $serveur='', $option=true) |
| 555 | 555 | { |
| 556 | - $f = sql_serveur('replace_multi', $serveur, $option==='continue' OR $option===false); |
|
| 557 | - if (!is_string($f) OR !$f) return false; |
|
| 558 | - $r = $f($table, $tab_couples, $desc, $serveur, $option!==false); |
|
| 559 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 560 | - return $r; |
|
| 556 | + $f = sql_serveur('replace_multi', $serveur, $option==='continue' OR $option===false); |
|
| 557 | + if (!is_string($f) OR !$f) return false; |
|
| 558 | + $r = $f($table, $tab_couples, $desc, $serveur, $option!==false); |
|
| 559 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 560 | + return $r; |
|
| 561 | 561 | } |
| 562 | 562 | |
| 563 | 563 | // http://doc.spip.org/@sql_drop_table |
| 564 | 564 | function sql_drop_table($table, $exist='', $serveur='', $option=true) |
| 565 | 565 | { |
| 566 | - $f = sql_serveur('drop_table', $serveur, $option==='continue' OR $option===false); |
|
| 567 | - if (!is_string($f) OR !$f) return false; |
|
| 568 | - $r = $f($table, $exist, $serveur, $option!==false); |
|
| 569 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 570 | - return $r; |
|
| 566 | + $f = sql_serveur('drop_table', $serveur, $option==='continue' OR $option===false); |
|
| 567 | + if (!is_string($f) OR !$f) return false; |
|
| 568 | + $r = $f($table, $exist, $serveur, $option!==false); |
|
| 569 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 570 | + return $r; |
|
| 571 | 571 | } |
| 572 | 572 | |
| 573 | 573 | // supprimer une vue sql |
| 574 | 574 | // http://doc.spip.org/@sql_drop_view |
| 575 | 575 | function sql_drop_view($table, $exist='', $serveur='', $option=true) |
| 576 | 576 | { |
| 577 | - $f = sql_serveur('drop_view', $serveur, $option==='continue' OR $option===false); |
|
| 578 | - if (!is_string($f) OR !$f) return false; |
|
| 579 | - $r = $f($table, $exist, $serveur, $option!==false); |
|
| 580 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 581 | - return $r; |
|
| 577 | + $f = sql_serveur('drop_view', $serveur, $option==='continue' OR $option===false); |
|
| 578 | + if (!is_string($f) OR !$f) return false; |
|
| 579 | + $r = $f($table, $exist, $serveur, $option!==false); |
|
| 580 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 581 | + return $r; |
|
| 582 | 582 | } |
| 583 | 583 | |
| 584 | 584 | /** |
@@ -601,16 +601,16 @@ discard block |
||
| 601 | 601 | **/ |
| 602 | 602 | function sql_showbase($spip=NULL, $serveur='', $option=true) |
| 603 | 603 | { |
| 604 | - $f = sql_serveur('showbase', $serveur, $option==='continue' OR $option===false); |
|
| 605 | - if (!is_string($f) OR !$f) return false; |
|
| 604 | + $f = sql_serveur('showbase', $serveur, $option==='continue' OR $option===false); |
|
| 605 | + if (!is_string($f) OR !$f) return false; |
|
| 606 | 606 | |
| 607 | - // la globale n'est remplie qu'apres l'appel de sql_serveur. |
|
| 608 | - if ($spip == NULL){ |
|
| 609 | - $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; |
|
| 610 | - $spip = $connexion['prefixe'] . '\_%'; |
|
| 611 | - } |
|
| 607 | + // la globale n'est remplie qu'apres l'appel de sql_serveur. |
|
| 608 | + if ($spip == NULL){ |
|
| 609 | + $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; |
|
| 610 | + $spip = $connexion['prefixe'] . '\_%'; |
|
| 611 | + } |
|
| 612 | 612 | |
| 613 | - return $f($spip, $serveur, $option!==false); |
|
| 613 | + return $f($spip, $serveur, $option!==false); |
|
| 614 | 614 | } |
| 615 | 615 | |
| 616 | 616 | /** |
@@ -634,50 +634,50 @@ discard block |
||
| 634 | 634 | **/ |
| 635 | 635 | function sql_alltable($spip=NULL, $serveur='', $option=true) |
| 636 | 636 | { |
| 637 | - $q = sql_showbase($spip, $serveur, $option); |
|
| 638 | - $r = array(); |
|
| 639 | - if ($q) while ($t = sql_fetch($q, $serveur)) { $r[] = array_shift($t);} |
|
| 640 | - return $r; |
|
| 637 | + $q = sql_showbase($spip, $serveur, $option); |
|
| 638 | + $r = array(); |
|
| 639 | + if ($q) while ($t = sql_fetch($q, $serveur)) { $r[] = array_shift($t);} |
|
| 640 | + return $r; |
|
| 641 | 641 | } |
| 642 | 642 | |
| 643 | 643 | // http://doc.spip.org/@sql_showtable |
| 644 | 644 | function sql_showtable($table, $table_spip = false, $serveur='', $option=true) |
| 645 | 645 | { |
| 646 | - $f = sql_serveur('showtable', $serveur, $option==='continue' OR $option===false); |
|
| 647 | - if (!is_string($f) OR !$f) return false; |
|
| 648 | - |
|
| 649 | - // la globale n'est remplie qu'apres l'appel de sql_serveur. |
|
| 650 | - if ($table_spip){ |
|
| 651 | - $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; |
|
| 652 | - $prefixe = $connexion['prefixe']; |
|
| 653 | - $vraie_table = preg_replace('/^spip/', $prefixe, $table); |
|
| 654 | - } else $vraie_table = $table; |
|
| 655 | - |
|
| 656 | - $f = $f($vraie_table, $serveur, $option!==false); |
|
| 657 | - if (!$f) return array(); |
|
| 658 | - if (isset($GLOBALS['tables_principales'][$table]['join'])) |
|
| 659 | - $f['join'] = $GLOBALS['tables_principales'][$table]['join']; |
|
| 660 | - elseif (isset($GLOBALS['tables_auxiliaires'][$table]['join'])) |
|
| 661 | - $f['join'] = $GLOBALS['tables_auxiliaires'][$table]['join']; |
|
| 662 | - return $f; |
|
| 646 | + $f = sql_serveur('showtable', $serveur, $option==='continue' OR $option===false); |
|
| 647 | + if (!is_string($f) OR !$f) return false; |
|
| 648 | + |
|
| 649 | + // la globale n'est remplie qu'apres l'appel de sql_serveur. |
|
| 650 | + if ($table_spip){ |
|
| 651 | + $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]; |
|
| 652 | + $prefixe = $connexion['prefixe']; |
|
| 653 | + $vraie_table = preg_replace('/^spip/', $prefixe, $table); |
|
| 654 | + } else $vraie_table = $table; |
|
| 655 | + |
|
| 656 | + $f = $f($vraie_table, $serveur, $option!==false); |
|
| 657 | + if (!$f) return array(); |
|
| 658 | + if (isset($GLOBALS['tables_principales'][$table]['join'])) |
|
| 659 | + $f['join'] = $GLOBALS['tables_principales'][$table]['join']; |
|
| 660 | + elseif (isset($GLOBALS['tables_auxiliaires'][$table]['join'])) |
|
| 661 | + $f['join'] = $GLOBALS['tables_auxiliaires'][$table]['join']; |
|
| 662 | + return $f; |
|
| 663 | 663 | } |
| 664 | 664 | |
| 665 | 665 | // http://doc.spip.org/@sql_create |
| 666 | 666 | function sql_create($nom, $champs, $cles=array(), $autoinc=false, $temporary=false, $serveur='', $option=true) { |
| 667 | - $f = sql_serveur('create', $serveur, $option==='continue' OR $option===false); |
|
| 668 | - if (!is_string($f) OR !$f) return false; |
|
| 669 | - $r = $f($nom, $champs, $cles, $autoinc, $temporary, $serveur, $option!==false); |
|
| 670 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 671 | - return $r; |
|
| 667 | + $f = sql_serveur('create', $serveur, $option==='continue' OR $option===false); |
|
| 668 | + if (!is_string($f) OR !$f) return false; |
|
| 669 | + $r = $f($nom, $champs, $cles, $autoinc, $temporary, $serveur, $option!==false); |
|
| 670 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 671 | + return $r; |
|
| 672 | 672 | } |
| 673 | 673 | |
| 674 | 674 | function sql_create_base($nom, $serveur='', $option=true) |
| 675 | 675 | { |
| 676 | - $f = sql_serveur('create_base', $serveur, $option==='continue' OR $option===false); |
|
| 677 | - if (!is_string($f) OR !$f) return false; |
|
| 678 | - $r = $f($nom, $serveur, $option!==false); |
|
| 679 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 680 | - return $r; |
|
| 676 | + $f = sql_serveur('create_base', $serveur, $option==='continue' OR $option===false); |
|
| 677 | + if (!is_string($f) OR !$f) return false; |
|
| 678 | + $r = $f($nom, $serveur, $option!==false); |
|
| 679 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 680 | + return $r; |
|
| 681 | 681 | } |
| 682 | 682 | |
| 683 | 683 | // Fonction pour creer une vue |
@@ -686,19 +686,19 @@ discard block |
||
| 686 | 686 | // (en mettant $option du sql_select a false pour recuperer la requete) |
| 687 | 687 | // http://doc.spip.org/@sql_create_view |
| 688 | 688 | function sql_create_view($nom, $select_query, $serveur='', $option=true) { |
| 689 | - $f = sql_serveur('create_view', $serveur, $option==='continue' OR $option===false); |
|
| 690 | - if (!is_string($f) OR !$f) return false; |
|
| 691 | - $r = $f($nom, $select_query, $serveur, $option!==false); |
|
| 692 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 693 | - return $r; |
|
| 689 | + $f = sql_serveur('create_view', $serveur, $option==='continue' OR $option===false); |
|
| 690 | + if (!is_string($f) OR !$f) return false; |
|
| 691 | + $r = $f($nom, $select_query, $serveur, $option!==false); |
|
| 692 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 693 | + return $r; |
|
| 694 | 694 | } |
| 695 | 695 | |
| 696 | 696 | // http://doc.spip.org/@sql_multi |
| 697 | 697 | function sql_multi($sel, $lang, $serveur='', $option=true) |
| 698 | 698 | { |
| 699 | - $f = sql_serveur('multi', $serveur, $option==='continue' OR $option===false); |
|
| 700 | - if (!is_string($f) OR !$f) return false; |
|
| 701 | - return $f($sel, $lang); |
|
| 699 | + $f = sql_serveur('multi', $serveur, $option==='continue' OR $option===false); |
|
| 700 | + if (!is_string($f) OR !$f) return false; |
|
| 701 | + return $f($sel, $lang); |
|
| 702 | 702 | } |
| 703 | 703 | |
| 704 | 704 | |
@@ -713,9 +713,9 @@ discard block |
||
| 713 | 713 | * False si le serveur est indisponible |
| 714 | 714 | */ |
| 715 | 715 | function sql_error($serveur='') { |
| 716 | - $f = sql_serveur('error', $serveur, 'continue'); |
|
| 717 | - if (!is_string($f) OR !$f) return false; |
|
| 718 | - return $f('query inconnue', $serveur); |
|
| 716 | + $f = sql_serveur('error', $serveur, 'continue'); |
|
| 717 | + if (!is_string($f) OR !$f) return false; |
|
| 718 | + return $f('query inconnue', $serveur); |
|
| 719 | 719 | } |
| 720 | 720 | |
| 721 | 721 | /** |
@@ -729,36 +729,36 @@ discard block |
||
| 729 | 729 | * False si le serveur est indisponible |
| 730 | 730 | */ |
| 731 | 731 | function sql_errno($serveur='') { |
| 732 | - $f = sql_serveur('errno', $serveur, 'continue'); |
|
| 733 | - if (!is_string($f) OR !$f) return false; |
|
| 734 | - return $f($serveur); |
|
| 732 | + $f = sql_serveur('errno', $serveur, 'continue'); |
|
| 733 | + if (!is_string($f) OR !$f) return false; |
|
| 734 | + return $f($serveur); |
|
| 735 | 735 | } |
| 736 | 736 | |
| 737 | 737 | // http://doc.spip.org/@sql_explain |
| 738 | 738 | function sql_explain($q, $serveur='', $option=true) { |
| 739 | - $f = sql_serveur('explain', $serveur, 'continue'); |
|
| 740 | - if (!is_string($f) OR !$f) return false; |
|
| 741 | - $r = $f($q, $serveur, $option!==false); |
|
| 742 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 743 | - return $r; |
|
| 739 | + $f = sql_serveur('explain', $serveur, 'continue'); |
|
| 740 | + if (!is_string($f) OR !$f) return false; |
|
| 741 | + $r = $f($q, $serveur, $option!==false); |
|
| 742 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 743 | + return $r; |
|
| 744 | 744 | } |
| 745 | 745 | |
| 746 | 746 | // http://doc.spip.org/@sql_optimize |
| 747 | 747 | function sql_optimize($table, $serveur='', $option=true) { |
| 748 | - $f = sql_serveur('optimize', $serveur, $option==='continue' OR $option===false); |
|
| 749 | - if (!is_string($f) OR !$f) return false; |
|
| 750 | - $r = $f($table, $serveur, $option!==false); |
|
| 751 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 752 | - return $r; |
|
| 748 | + $f = sql_serveur('optimize', $serveur, $option==='continue' OR $option===false); |
|
| 749 | + if (!is_string($f) OR !$f) return false; |
|
| 750 | + $r = $f($table, $serveur, $option!==false); |
|
| 751 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 752 | + return $r; |
|
| 753 | 753 | } |
| 754 | 754 | |
| 755 | 755 | // http://doc.spip.org/@sql_repair |
| 756 | 756 | function sql_repair($table, $serveur='', $option=true) { |
| 757 | - $f = sql_serveur('repair', $serveur, $option==='continue' OR $option===false); |
|
| 758 | - if (!is_string($f) OR !$f) return false; |
|
| 759 | - $r = $f($table, $serveur, $option!==false); |
|
| 760 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 761 | - return $r; |
|
| 757 | + $f = sql_serveur('repair', $serveur, $option==='continue' OR $option===false); |
|
| 758 | + if (!is_string($f) OR !$f) return false; |
|
| 759 | + $r = $f($table, $serveur, $option!==false); |
|
| 760 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 761 | + return $r; |
|
| 762 | 762 | } |
| 763 | 763 | |
| 764 | 764 | // Fonction la plus generale ... et la moins portable |
@@ -766,11 +766,11 @@ discard block |
||
| 766 | 766 | |
| 767 | 767 | // http://doc.spip.org/@sql_query |
| 768 | 768 | function sql_query($ins, $serveur='', $option=true) { |
| 769 | - $f = sql_serveur('query', $serveur, $option==='continue' OR $option===false); |
|
| 770 | - if (!is_string($f) OR !$f) return false; |
|
| 771 | - $r = $f($ins, $serveur, $option!==false); |
|
| 772 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 773 | - return $r; |
|
| 769 | + $f = sql_serveur('query', $serveur, $option==='continue' OR $option===false); |
|
| 770 | + if (!is_string($f) OR !$f) return false; |
|
| 771 | + $r = $f($ins, $serveur, $option!==false); |
|
| 772 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 773 | + return $r; |
|
| 774 | 774 | } |
| 775 | 775 | |
| 776 | 776 | /** |
@@ -819,14 +819,14 @@ discard block |
||
| 819 | 819 | * |
| 820 | 820 | **/ |
| 821 | 821 | function sql_fetsel($select = array(), $from = array(), $where = array(), |
| 822 | - $groupby = array(), $orderby = array(), $limit = '', |
|
| 823 | - $having = array(), $serveur='', $option=true) { |
|
| 824 | - $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); |
|
| 825 | - if ($option===false) return $q; |
|
| 826 | - if (!$q) return array(); |
|
| 827 | - $r = sql_fetch($q, $serveur, $option); |
|
| 828 | - sql_free($q, $serveur, $option); |
|
| 829 | - return $r; |
|
| 822 | + $groupby = array(), $orderby = array(), $limit = '', |
|
| 823 | + $having = array(), $serveur='', $option=true) { |
|
| 824 | + $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); |
|
| 825 | + if ($option===false) return $q; |
|
| 826 | + if (!$q) return array(); |
|
| 827 | + $r = sql_fetch($q, $serveur, $option); |
|
| 828 | + sql_free($q, $serveur, $option); |
|
| 829 | + return $r; |
|
| 830 | 830 | } |
| 831 | 831 | |
| 832 | 832 | |
@@ -883,11 +883,11 @@ discard block |
||
| 883 | 883 | * |
| 884 | 884 | **/ |
| 885 | 885 | function sql_allfetsel($select = array(), $from = array(), $where = array(), |
| 886 | - $groupby = array(), $orderby = array(), $limit = '', |
|
| 887 | - $having = array(), $serveur='', $option=true) { |
|
| 888 | - $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); |
|
| 889 | - if ($option===false) return $q; |
|
| 890 | - return sql_fetch_all($q, $serveur, $option); |
|
| 886 | + $groupby = array(), $orderby = array(), $limit = '', |
|
| 887 | + $having = array(), $serveur='', $option=true) { |
|
| 888 | + $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); |
|
| 889 | + if ($option===false) return $q; |
|
| 890 | + return sql_fetch_all($q, $serveur, $option); |
|
| 891 | 891 | } |
| 892 | 892 | |
| 893 | 893 | |
@@ -932,14 +932,14 @@ discard block |
||
| 932 | 932 | * |
| 933 | 933 | **/ |
| 934 | 934 | function sql_getfetsel($select, $from = array(), $where = array(), $groupby = array(), |
| 935 | - $orderby = array(), $limit = '', $having = array(), $serveur='', $option=true) { |
|
| 936 | - if (preg_match('/\s+as\s+(\w+)$/i', $select, $c)) $id = $c[1]; |
|
| 937 | - elseif (!preg_match('/\W/', $select)) $id = $select; |
|
| 938 | - else {$id = 'n'; $select .= ' AS n';} |
|
| 939 | - $r = sql_fetsel($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); |
|
| 940 | - if ($option===false) return $r; |
|
| 941 | - if (!$r) return NULL; |
|
| 942 | - return $r[$id]; |
|
| 935 | + $orderby = array(), $limit = '', $having = array(), $serveur='', $option=true) { |
|
| 936 | + if (preg_match('/\s+as\s+(\w+)$/i', $select, $c)) $id = $c[1]; |
|
| 937 | + elseif (!preg_match('/\W/', $select)) $id = $select; |
|
| 938 | + else {$id = 'n'; $select .= ' AS n';} |
|
| 939 | + $r = sql_fetsel($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); |
|
| 940 | + if ($option===false) return $r; |
|
| 941 | + if (!$r) return NULL; |
|
| 942 | + return $r[$id]; |
|
| 943 | 943 | } |
| 944 | 944 | |
| 945 | 945 | /** |
@@ -957,8 +957,8 @@ discard block |
||
| 957 | 957 | * Numero de version du serveur SQL |
| 958 | 958 | **/ |
| 959 | 959 | function sql_version($serveur='', $option=true) { |
| 960 | - $row = sql_fetsel("version() AS n", '','','','','','',$serveur); |
|
| 961 | - return ($row['n']); |
|
| 960 | + $row = sql_fetsel("version() AS n", '','','','','','',$serveur); |
|
| 961 | + return ($row['n']); |
|
| 962 | 962 | } |
| 963 | 963 | |
| 964 | 964 | /** |
@@ -994,11 +994,11 @@ discard block |
||
| 994 | 994 | * Le serveur SQL prefere t'il des transactions pour les insertions multiples ? |
| 995 | 995 | **/ |
| 996 | 996 | function sql_preferer_transaction($serveur='', $option=true) { |
| 997 | - $f = sql_serveur('preferer_transaction', $serveur, 'continue'); |
|
| 998 | - if (!is_string($f) OR !$f) return false; |
|
| 999 | - $r = $f($serveur, $option!==false); |
|
| 1000 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 1001 | - return $r; |
|
| 997 | + $f = sql_serveur('preferer_transaction', $serveur, 'continue'); |
|
| 998 | + if (!is_string($f) OR !$f) return false; |
|
| 999 | + $r = $f($serveur, $option!==false); |
|
| 1000 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 1001 | + return $r; |
|
| 1002 | 1002 | }; |
| 1003 | 1003 | |
| 1004 | 1004 | /** |
@@ -1020,11 +1020,11 @@ discard block |
||
| 1020 | 1020 | * false en cas d'erreur |
| 1021 | 1021 | **/ |
| 1022 | 1022 | function sql_demarrer_transaction($serveur='', $option=true) { |
| 1023 | - $f = sql_serveur('demarrer_transaction', $serveur, 'continue'); |
|
| 1024 | - if (!is_string($f) OR !$f) return false; |
|
| 1025 | - $r = $f($serveur, $option!==false); |
|
| 1026 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 1027 | - return $r; |
|
| 1023 | + $f = sql_serveur('demarrer_transaction', $serveur, 'continue'); |
|
| 1024 | + if (!is_string($f) OR !$f) return false; |
|
| 1025 | + $r = $f($serveur, $option!==false); |
|
| 1026 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 1027 | + return $r; |
|
| 1028 | 1028 | }; |
| 1029 | 1029 | |
| 1030 | 1030 | /** |
@@ -1046,11 +1046,11 @@ discard block |
||
| 1046 | 1046 | * false en cas d'erreur |
| 1047 | 1047 | **/ |
| 1048 | 1048 | function sql_terminer_transaction($serveur='', $option=true) { |
| 1049 | - $f = sql_serveur('terminer_transaction', $serveur, 'continue'); |
|
| 1050 | - if (!is_string($f) OR !$f) return false; |
|
| 1051 | - $r = $f($serveur, $option!==false); |
|
| 1052 | - if ($r === false) spip_sql_erreur($serveur); |
|
| 1053 | - return $r; |
|
| 1049 | + $f = sql_serveur('terminer_transaction', $serveur, 'continue'); |
|
| 1050 | + if (!is_string($f) OR !$f) return false; |
|
| 1051 | + $r = $f($serveur, $option!==false); |
|
| 1052 | + if ($r === false) spip_sql_erreur($serveur); |
|
| 1053 | + return $r; |
|
| 1054 | 1054 | }; |
| 1055 | 1055 | |
| 1056 | 1056 | |
@@ -1075,9 +1075,9 @@ discard block |
||
| 1075 | 1075 | **/ |
| 1076 | 1076 | function sql_hex($val, $serveur='', $option=true) |
| 1077 | 1077 | { |
| 1078 | - $f = sql_serveur('hex', $serveur, $option==='continue' OR $option===false); |
|
| 1079 | - if (!is_string($f) OR !$f) return false; |
|
| 1080 | - return $f($val); |
|
| 1078 | + $f = sql_serveur('hex', $serveur, $option==='continue' OR $option===false); |
|
| 1079 | + if (!is_string($f) OR !$f) return false; |
|
| 1080 | + return $f($val); |
|
| 1081 | 1081 | } |
| 1082 | 1082 | |
| 1083 | 1083 | /** |
@@ -1102,16 +1102,16 @@ discard block |
||
| 1102 | 1102 | **/ |
| 1103 | 1103 | function sql_quote($val, $serveur='', $type='') |
| 1104 | 1104 | { |
| 1105 | - $f = sql_serveur('quote', $serveur, true); |
|
| 1106 | - if (!is_string($f) OR !$f) $f = '_q'; |
|
| 1107 | - return $f($val, $type); |
|
| 1105 | + $f = sql_serveur('quote', $serveur, true); |
|
| 1106 | + if (!is_string($f) OR !$f) $f = '_q'; |
|
| 1107 | + return $f($val, $type); |
|
| 1108 | 1108 | } |
| 1109 | 1109 | |
| 1110 | 1110 | function sql_date_proche($champ, $interval, $unite, $serveur='', $option=true) |
| 1111 | 1111 | { |
| 1112 | - $f = sql_serveur('date_proche', $serveur, true); |
|
| 1113 | - if (!is_string($f) OR !$f) return false; |
|
| 1114 | - return $f($champ, $interval, $unite); |
|
| 1112 | + $f = sql_serveur('date_proche', $serveur, true); |
|
| 1113 | + if (!is_string($f) OR !$f) return false; |
|
| 1114 | + return $f($champ, $interval, $unite); |
|
| 1115 | 1115 | } |
| 1116 | 1116 | |
| 1117 | 1117 | /** |
@@ -1143,16 +1143,16 @@ discard block |
||
| 1143 | 1143 | * Expression de requête SQL |
| 1144 | 1144 | **/ |
| 1145 | 1145 | function sql_in($val, $valeurs, $not='', $serveur='', $option=true) { |
| 1146 | - if (is_array($valeurs)) { |
|
| 1147 | - $f = sql_serveur('quote', $serveur, true); |
|
| 1148 | - if (!is_string($f) OR !$f) return false; |
|
| 1149 | - $valeurs = join(',', array_map($f, array_unique($valeurs))); |
|
| 1150 | - } elseif (isset($valeurs[0]) AND $valeurs[0]===',') $valeurs = substr($valeurs,1); |
|
| 1151 | - if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1'); |
|
| 1152 | - |
|
| 1153 | - $f = sql_serveur('in', $serveur, $option==='continue' OR $option===false); |
|
| 1154 | - if (!is_string($f) OR !$f) return false; |
|
| 1155 | - return $f($val, $valeurs, $not, $serveur, $option!==false); |
|
| 1146 | + if (is_array($valeurs)) { |
|
| 1147 | + $f = sql_serveur('quote', $serveur, true); |
|
| 1148 | + if (!is_string($f) OR !$f) return false; |
|
| 1149 | + $valeurs = join(',', array_map($f, array_unique($valeurs))); |
|
| 1150 | + } elseif (isset($valeurs[0]) AND $valeurs[0]===',') $valeurs = substr($valeurs,1); |
|
| 1151 | + if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1'); |
|
| 1152 | + |
|
| 1153 | + $f = sql_serveur('in', $serveur, $option==='continue' OR $option===false); |
|
| 1154 | + if (!is_string($f) OR !$f) return false; |
|
| 1155 | + return $f($val, $valeurs, $not, $serveur, $option!==false); |
|
| 1156 | 1156 | } |
| 1157 | 1157 | |
| 1158 | 1158 | // Penser a dire dans la description du serveur |
@@ -1160,13 +1160,13 @@ discard block |
||
| 1160 | 1160 | |
| 1161 | 1161 | // http://doc.spip.org/@sql_in_select |
| 1162 | 1162 | function sql_in_select($in, $select, $from = array(), $where = array(), |
| 1163 | - $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='') |
|
| 1163 | + $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='') |
|
| 1164 | 1164 | { |
| 1165 | - $liste = array(); |
|
| 1166 | - $res = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur); |
|
| 1167 | - while ($r = sql_fetch($res)) {$liste[] = array_shift($r);} |
|
| 1168 | - sql_free($res); |
|
| 1169 | - return sql_in($in, $liste); |
|
| 1165 | + $liste = array(); |
|
| 1166 | + $res = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur); |
|
| 1167 | + while ($r = sql_fetch($res)) {$liste[] = array_shift($r);} |
|
| 1168 | + sql_free($res); |
|
| 1169 | + return sql_in($in, $liste); |
|
| 1170 | 1170 | } |
| 1171 | 1171 | |
| 1172 | 1172 | /** |
@@ -1197,32 +1197,32 @@ discard block |
||
| 1197 | 1197 | * Position apres le saut. |
| 1198 | 1198 | */ |
| 1199 | 1199 | function sql_skip($res, $pos, $saut, $count, $serveur='', $option=true){ |
| 1200 | - // pas de saut en arriere qu'on ne sait pas faire sans sql_seek |
|
| 1201 | - if (($saut=intval($saut))<=0) return $pos; |
|
| 1202 | - |
|
| 1203 | - $seek = $pos + $saut; |
|
| 1204 | - // si le saut fait depasser le maxi, on libere la resource |
|
| 1205 | - // et on sort |
|
| 1206 | - if ($seek>=$count) {sql_free($res, $serveur, $option); return $count;} |
|
| 1207 | - |
|
| 1208 | - if (sql_seek($res, $seek)) |
|
| 1209 | - $pos = $seek; |
|
| 1210 | - else |
|
| 1211 | - while ($pos<$seek AND sql_fetch($res, $serveur, $option)) |
|
| 1212 | - $pos++; |
|
| 1213 | - return $pos; |
|
| 1200 | + // pas de saut en arriere qu'on ne sait pas faire sans sql_seek |
|
| 1201 | + if (($saut=intval($saut))<=0) return $pos; |
|
| 1202 | + |
|
| 1203 | + $seek = $pos + $saut; |
|
| 1204 | + // si le saut fait depasser le maxi, on libere la resource |
|
| 1205 | + // et on sort |
|
| 1206 | + if ($seek>=$count) {sql_free($res, $serveur, $option); return $count;} |
|
| 1207 | + |
|
| 1208 | + if (sql_seek($res, $seek)) |
|
| 1209 | + $pos = $seek; |
|
| 1210 | + else |
|
| 1211 | + while ($pos<$seek AND sql_fetch($res, $serveur, $option)) |
|
| 1212 | + $pos++; |
|
| 1213 | + return $pos; |
|
| 1214 | 1214 | } |
| 1215 | 1215 | |
| 1216 | 1216 | // http://doc.spip.org/@sql_test_int |
| 1217 | 1217 | function sql_test_int($type, $serveur='', $option=true) |
| 1218 | 1218 | { |
| 1219 | - return preg_match('/^(TINYINT|SMALLINT|MEDIUMINT|INT|INTEGER|BIGINT)/i',trim($type)); |
|
| 1219 | + return preg_match('/^(TINYINT|SMALLINT|MEDIUMINT|INT|INTEGER|BIGINT)/i',trim($type)); |
|
| 1220 | 1220 | } |
| 1221 | 1221 | |
| 1222 | 1222 | // http://doc.spip.org/@sql_test_date |
| 1223 | 1223 | function sql_test_date($type, $serveur='', $option=true) |
| 1224 | 1224 | { |
| 1225 | - return preg_match('/^(DATE|DATETIME|TIMESTAMP|TIME)/i',trim($type)); |
|
| 1225 | + return preg_match('/^(DATE|DATETIME|TIMESTAMP|TIME)/i',trim($type)); |
|
| 1226 | 1226 | } |
| 1227 | 1227 | |
| 1228 | 1228 | /** |
@@ -1245,15 +1245,15 @@ discard block |
||
| 1245 | 1245 | * La date formatee |
| 1246 | 1246 | */ |
| 1247 | 1247 | function sql_format_date($annee=0, $mois=0, $jour=0, $h=0, $m=0, $s=0, $serveur=''){ |
| 1248 | - $annee = sprintf("%04s",$annee); |
|
| 1249 | - $mois = sprintf("%02s",$mois); |
|
| 1248 | + $annee = sprintf("%04s",$annee); |
|
| 1249 | + $mois = sprintf("%02s",$mois); |
|
| 1250 | 1250 | |
| 1251 | - if ($annee == "0000") $mois = 0; |
|
| 1252 | - if ($mois == "00") $jour = 0; |
|
| 1251 | + if ($annee == "0000") $mois = 0; |
|
| 1252 | + if ($mois == "00") $jour = 0; |
|
| 1253 | 1253 | |
| 1254 | - return sprintf("%04u",$annee) . '-' . sprintf("%02u",$mois) . '-' |
|
| 1255 | - . sprintf("%02u",$jour) . ' ' . sprintf("%02u",$h) . ':' |
|
| 1256 | - . sprintf("%02u",$m) . ':' . sprintf("%02u",$s); |
|
| 1254 | + return sprintf("%04u",$annee) . '-' . sprintf("%02u",$mois) . '-' |
|
| 1255 | + . sprintf("%02u",$jour) . ' ' . sprintf("%02u",$h) . ':' |
|
| 1256 | + . sprintf("%02u",$m) . ':' . sprintf("%02u",$s); |
|
| 1257 | 1257 | } |
| 1258 | 1258 | |
| 1259 | 1259 | |
@@ -1277,28 +1277,28 @@ discard block |
||
| 1277 | 1277 | **/ |
| 1278 | 1278 | function description_table($nom, $serveur=''){ |
| 1279 | 1279 | |
| 1280 | - global $tables_principales, $tables_auxiliaires; |
|
| 1281 | - static $trouver_table; |
|
| 1280 | + global $tables_principales, $tables_auxiliaires; |
|
| 1281 | + static $trouver_table; |
|
| 1282 | 1282 | |
| 1283 | - /* toujours utiliser trouver_table |
|
| 1283 | + /* toujours utiliser trouver_table |
|
| 1284 | 1284 | qui renverra la description theorique |
| 1285 | 1285 | car sinon on va se comporter differement selon que la table est declaree |
| 1286 | 1286 | ou non |
| 1287 | 1287 | */ |
| 1288 | - if (!$trouver_table) $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1289 | - if ($desc = $trouver_table($nom, $serveur)) |
|
| 1290 | - return $desc; |
|
| 1288 | + if (!$trouver_table) $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1289 | + if ($desc = $trouver_table($nom, $serveur)) |
|
| 1290 | + return $desc; |
|
| 1291 | 1291 | |
| 1292 | - // sauf a l'installation : |
|
| 1293 | - include_spip('base/serial'); |
|
| 1294 | - if (isset($tables_principales[$nom])) |
|
| 1295 | - return $tables_principales[$nom]; |
|
| 1292 | + // sauf a l'installation : |
|
| 1293 | + include_spip('base/serial'); |
|
| 1294 | + if (isset($tables_principales[$nom])) |
|
| 1295 | + return $tables_principales[$nom]; |
|
| 1296 | 1296 | |
| 1297 | - include_spip('base/auxiliaires'); |
|
| 1298 | - if (isset($tables_auxiliaires[$nom])) |
|
| 1299 | - return $tables_auxiliaires[$nom]; |
|
| 1297 | + include_spip('base/auxiliaires'); |
|
| 1298 | + if (isset($tables_auxiliaires[$nom])) |
|
| 1299 | + return $tables_auxiliaires[$nom]; |
|
| 1300 | 1300 | |
| 1301 | - return false; |
|
| 1301 | + return false; |
|
| 1302 | 1302 | } |
| 1303 | 1303 | |
| 1304 | 1304 | |
@@ -26,17 +26,17 @@ discard block |
||
| 26 | 26 | * @return bool |
| 27 | 27 | */ |
| 28 | 28 | function base_determine_autoinc($table,$desc=array()){ |
| 29 | - if ($t=lister_tables_principales() AND isset($t[$table])) |
|
| 30 | - $autoinc = true; |
|
| 31 | - elseif ($t=lister_tables_auxiliaires() AND isset($t[$table])) |
|
| 32 | - $autoinc = false; |
|
| 33 | - else { |
|
| 34 | - // essayer de faire au mieux ! |
|
| 35 | - $autoinc = (isset($desc['key']['PRIMARY KEY']) |
|
| 36 | - AND strpos($desc['key']['PRIMARY KEY'],',')===false |
|
| 37 | - AND strpos($desc['field'][$desc['key']['PRIMARY KEY']],'default')===false); |
|
| 38 | - } |
|
| 39 | - return $autoinc; |
|
| 29 | + if ($t=lister_tables_principales() AND isset($t[$table])) |
|
| 30 | + $autoinc = true; |
|
| 31 | + elseif ($t=lister_tables_auxiliaires() AND isset($t[$table])) |
|
| 32 | + $autoinc = false; |
|
| 33 | + else { |
|
| 34 | + // essayer de faire au mieux ! |
|
| 35 | + $autoinc = (isset($desc['key']['PRIMARY KEY']) |
|
| 36 | + AND strpos($desc['key']['PRIMARY KEY'],',')===false |
|
| 37 | + AND strpos($desc['field'][$desc['key']['PRIMARY KEY']],'default')===false); |
|
| 38 | + } |
|
| 39 | + return $autoinc; |
|
| 40 | 40 | } |
| 41 | 41 | |
| 42 | 42 | /** |
@@ -55,51 +55,51 @@ discard block |
||
| 55 | 55 | * @return void |
| 56 | 56 | */ |
| 57 | 57 | function creer_ou_upgrader_table($table,$desc,$autoinc,$upgrade=false,$serveur='') { |
| 58 | - #spip_log("creer_ou_upgrader_table table=$table autoinc=$autoinc upgrade=$upgrade","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 59 | - $sql_desc = $upgrade ? sql_showtable($table,true,$serveur) : false; |
|
| 60 | - #if (!$sql_desc) $sql_desc = false; |
|
| 61 | - #spip_log("table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 62 | - if (!$sql_desc) { |
|
| 63 | - if ($autoinc==='auto') |
|
| 64 | - $autoinc = base_determine_autoinc($table,$desc); |
|
| 65 | - #spip_log("sql_create $table autoinc=$autoinc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 66 | - sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur); |
|
| 67 | - // verifier la bonne installation de la table (php-fpm es-tu la ?) |
|
| 68 | - $sql_desc = sql_showtable($table,true,$serveur); |
|
| 69 | - #if (!$sql_desc) $sql_desc = false; |
|
| 70 | - #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 71 | - if (!$sql_desc){ |
|
| 72 | - // on retente avec un sleep ? |
|
| 73 | - sleep(1); |
|
| 74 | - sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur); |
|
| 75 | - $sql_desc = sql_showtable($table,true,$serveur); |
|
| 76 | - #if (!$sql_desc) $sql_desc = false; |
|
| 77 | - #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 78 | - if (!$sql_desc){ |
|
| 79 | - spip_log("Echec creation table $table","maj"._LOG_CRITIQUE); |
|
| 80 | - } |
|
| 81 | - } |
|
| 82 | - } |
|
| 83 | - else { |
|
| 84 | - #spip_log("sql_alter $table ... (on s'en fiche)","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 85 | - // ajouter les champs manquants |
|
| 86 | - // on ne supprime jamais les champs, car c'est dangereux |
|
| 87 | - // c'est toujours a faire manuellement |
|
| 88 | - $last = ''; |
|
| 89 | - foreach($desc['field'] as $field=>$type){ |
|
| 90 | - if (!isset($sql_desc['field'][$field])) |
|
| 91 | - sql_alter("TABLE $table ADD $field $type".($last?" AFTER $last":""),$serveur); |
|
| 92 | - $last = $field; |
|
| 93 | - } |
|
| 94 | - foreach($desc['key'] as $key=>$type){ |
|
| 95 | - // Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees |
|
| 96 | - // par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY" |
|
| 97 | - if (!isset($sql_desc['key'][$key]) AND !isset($sql_desc['key']["$key $type"])) |
|
| 98 | - sql_alter("TABLE $table ADD $key ($type)",$serveur); |
|
| 99 | - $last = $field; |
|
| 100 | - } |
|
| 58 | + #spip_log("creer_ou_upgrader_table table=$table autoinc=$autoinc upgrade=$upgrade","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 59 | + $sql_desc = $upgrade ? sql_showtable($table,true,$serveur) : false; |
|
| 60 | + #if (!$sql_desc) $sql_desc = false; |
|
| 61 | + #spip_log("table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 62 | + if (!$sql_desc) { |
|
| 63 | + if ($autoinc==='auto') |
|
| 64 | + $autoinc = base_determine_autoinc($table,$desc); |
|
| 65 | + #spip_log("sql_create $table autoinc=$autoinc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 66 | + sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur); |
|
| 67 | + // verifier la bonne installation de la table (php-fpm es-tu la ?) |
|
| 68 | + $sql_desc = sql_showtable($table,true,$serveur); |
|
| 69 | + #if (!$sql_desc) $sql_desc = false; |
|
| 70 | + #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 71 | + if (!$sql_desc){ |
|
| 72 | + // on retente avec un sleep ? |
|
| 73 | + sleep(1); |
|
| 74 | + sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur); |
|
| 75 | + $sql_desc = sql_showtable($table,true,$serveur); |
|
| 76 | + #if (!$sql_desc) $sql_desc = false; |
|
| 77 | + #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 78 | + if (!$sql_desc){ |
|
| 79 | + spip_log("Echec creation table $table","maj"._LOG_CRITIQUE); |
|
| 80 | + } |
|
| 81 | + } |
|
| 82 | + } |
|
| 83 | + else { |
|
| 84 | + #spip_log("sql_alter $table ... (on s'en fiche)","dbinstall"._LOG_INFO_IMPORTANTE); |
|
| 85 | + // ajouter les champs manquants |
|
| 86 | + // on ne supprime jamais les champs, car c'est dangereux |
|
| 87 | + // c'est toujours a faire manuellement |
|
| 88 | + $last = ''; |
|
| 89 | + foreach($desc['field'] as $field=>$type){ |
|
| 90 | + if (!isset($sql_desc['field'][$field])) |
|
| 91 | + sql_alter("TABLE $table ADD $field $type".($last?" AFTER $last":""),$serveur); |
|
| 92 | + $last = $field; |
|
| 93 | + } |
|
| 94 | + foreach($desc['key'] as $key=>$type){ |
|
| 95 | + // Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees |
|
| 96 | + // par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY" |
|
| 97 | + if (!isset($sql_desc['key'][$key]) AND !isset($sql_desc['key']["$key $type"])) |
|
| 98 | + sql_alter("TABLE $table ADD $key ($type)",$serveur); |
|
| 99 | + $last = $field; |
|
| 100 | + } |
|
| 101 | 101 | |
| 102 | - } |
|
| 102 | + } |
|
| 103 | 103 | } |
| 104 | 104 | |
| 105 | 105 | /** |
@@ -120,20 +120,20 @@ discard block |
||
| 120 | 120 | */ |
| 121 | 121 | function alterer_base($tables_inc, $tables_noinc, $up=false, $serveur='') |
| 122 | 122 | { |
| 123 | - if ($up === false) { |
|
| 124 | - $old = false; |
|
| 125 | - $up = array(); |
|
| 126 | - } else { |
|
| 127 | - $old = true; |
|
| 128 | - if (!is_array($up)) $up = array($up); |
|
| 129 | - } |
|
| 130 | - foreach($tables_inc as $k => $v) |
|
| 131 | - if (!$old OR in_array($k, $up)) |
|
| 132 | - creer_ou_upgrader_table($k,$v,true,$old,$serveur); |
|
| 123 | + if ($up === false) { |
|
| 124 | + $old = false; |
|
| 125 | + $up = array(); |
|
| 126 | + } else { |
|
| 127 | + $old = true; |
|
| 128 | + if (!is_array($up)) $up = array($up); |
|
| 129 | + } |
|
| 130 | + foreach($tables_inc as $k => $v) |
|
| 131 | + if (!$old OR in_array($k, $up)) |
|
| 132 | + creer_ou_upgrader_table($k,$v,true,$old,$serveur); |
|
| 133 | 133 | |
| 134 | - foreach($tables_noinc as $k => $v) |
|
| 135 | - if (!$old OR in_array($k, $up)) |
|
| 136 | - creer_ou_upgrader_table($k,$v,false,$old,$serveur); |
|
| 134 | + foreach($tables_noinc as $k => $v) |
|
| 135 | + if (!$old OR in_array($k, $up)) |
|
| 136 | + creer_ou_upgrader_table($k,$v,false,$old,$serveur); |
|
| 137 | 137 | } |
| 138 | 138 | |
| 139 | 139 | /** |
@@ -147,14 +147,14 @@ discard block |
||
| 147 | 147 | */ |
| 148 | 148 | function creer_base($serveur='') { |
| 149 | 149 | |
| 150 | - // Note: les mises a jour reexecutent ce code pour s'assurer |
|
| 151 | - // de la conformite de la base |
|
| 152 | - // pas de panique sur "already exists" et "duplicate entry" donc. |
|
| 150 | + // Note: les mises a jour reexecutent ce code pour s'assurer |
|
| 151 | + // de la conformite de la base |
|
| 152 | + // pas de panique sur "already exists" et "duplicate entry" donc. |
|
| 153 | 153 | |
| 154 | - alterer_base(lister_tables_principales(), |
|
| 155 | - lister_tables_auxiliaires(), |
|
| 156 | - false, |
|
| 157 | - $serveur); |
|
| 154 | + alterer_base(lister_tables_principales(), |
|
| 155 | + lister_tables_auxiliaires(), |
|
| 156 | + false, |
|
| 157 | + $serveur); |
|
| 158 | 158 | } |
| 159 | 159 | |
| 160 | 160 | /** |
@@ -167,10 +167,10 @@ discard block |
||
| 167 | 167 | * @return void |
| 168 | 168 | */ |
| 169 | 169 | function maj_tables($upgrade_tables=array(),$serveur=''){ |
| 170 | - alterer_base(lister_tables_principales(), |
|
| 171 | - lister_tables_auxiliaires(), |
|
| 172 | - $upgrade_tables, |
|
| 173 | - $serveur); |
|
| 170 | + alterer_base(lister_tables_principales(), |
|
| 171 | + lister_tables_auxiliaires(), |
|
| 172 | + $upgrade_tables, |
|
| 173 | + $serveur); |
|
| 174 | 174 | } |
| 175 | 175 | |
| 176 | 176 | ?> |