diff --git a/ecrire/base/objets.php b/ecrire/base/objets.php index 437f8c3ad2b2507a73f859181a89b677829ff6d0..c29403c1d77c9521b315d185871b3362de8ab4ef 100644 --- a/ecrire/base/objets.php +++ b/ecrire/base/objets.php @@ -583,7 +583,8 @@ function table_objet($type,$serveur='') { function table_objet_sql($type,$serveur='') { global $table_des_tables; $nom = table_objet($type, $serveur); - include_spip('public/interfaces'); + if (!isset($table_des_tables['articles'])) // eviter de multiples inclusions + include_spip('public/interfaces'); if (isset($table_des_tables[$nom])) { $nom = $table_des_tables[$nom]; $nom = "spip_$nom"; diff --git a/ecrire/base/trouver_table.php b/ecrire/base/trouver_table.php index a633b153478366c3f92ebd57441f9e5f434392a6..f5ff7be61766df563ff7b09729f409cdb4f977ec 100644 --- a/ecrire/base/trouver_table.php +++ b/ecrire/base/trouver_table.php @@ -12,6 +12,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return; include_spip('public/interfaces'); +include_spip('base/objets'); // Trouve la description d'une table, en particulier celle d'une boucle // Si on ne la trouve pas, on demande au serveur SQL @@ -67,7 +68,6 @@ function base_trouver_table_dist($nom, $serveur='', $table_spip = true){ // base sous SPIP: gerer les abreviations explicites des noms de table if ($connexion['spip_connect_version']) { - include_spip('public/interfaces'); if (isset($table_des_tables[$nom])) { $nom = $table_des_tables[$nom]; $nom_sql = 'spip_' . $nom; @@ -127,7 +127,6 @@ function base_trouver_table_dist($nom, $serveur='', $table_spip = true){ // charger les infos declarees pour cette table // en lui passant les infos connues // $desc est prioritaire pour la description de la table - include_spip('base/objets'); $desc = array_merge(lister_tables_objets_sql($nom_sql,$desc),$desc); $connexion['tables'][$nom] = $desc; diff --git a/ecrire/inc/bandeau.php b/ecrire/inc/bandeau.php index 7e76fe5255de607703885843375507dbb4de647b..a1efea6e95894bb29e61fca776af90b1c4f77e82 100644 --- a/ecrire/inc/bandeau.php +++ b/ecrire/inc/bandeau.php @@ -20,7 +20,8 @@ function definir_barre_contexte($contexte = null){ elseif(is_string($contexte)) $contexte = unserialize($contexte); if (!isset($contexte['id_rubrique']) AND isset($contexte['exec'])){ - include_spip('inc/pipelines_ecrire'); + if (!function_exists('trouver_objet_exec')) + include_spip('inc/pipelines_ecrire'); if ($e=trouver_objet_exec($contexte['exec'])){ $_id = $e['id_table_objet']; if (isset($contexte[$_id]) AND $id=intval($contexte[$_id])){ diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index fa08ff9b5cf7ba8f55ff353f1b6b3dd8ca2d5a94..b7e79420aea02b9b86a30f38fdf02726473b0418 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -14,6 +14,8 @@ if (!defined('_ECRIRE_INC_VERSION')) return; include_spip('inc/charsets'); include_spip('inc/filtres_mini'); +include_spip('base/objets'); +include_spip('public/parametrer'); // charger les fichiers fonctions /** * Charger un filtre depuis le php : @@ -114,15 +116,15 @@ function version_svn_courante($dir) { // La matrice est necessaire pour ne filtrer _que_ des fonctions definies dans filtres_images // et laisser passer les fonctions personnelles baptisees image_... -$GLOBALS['spip_matrice']['image_graver'] = 'inc/filtres_images_mini.php'; -$GLOBALS['spip_matrice']['image_select'] = 'inc/filtres_images_mini.php'; -$GLOBALS['spip_matrice']['image_reduire'] = 'inc/filtres_images_mini.php'; -$GLOBALS['spip_matrice']['image_reduire_par'] = 'inc/filtres_images_mini.php'; -$GLOBALS['spip_matrice']['image_passe_partout'] = 'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['image_graver'] = true;//'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['image_select'] = true;//'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['image_reduire'] = true;//'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['image_reduire_par'] = true;//'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['image_passe_partout'] = true;//'inc/filtres_images_mini.php'; -$GLOBALS['spip_matrice']['couleur_html_to_hex'] = 'inc/filtres_images_mini.php'; -$GLOBALS['spip_matrice']['couleur_foncer'] = 'inc/filtres_images_mini.php'; -$GLOBALS['spip_matrice']['couleur_eclaircir'] = 'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['couleur_html_to_hex'] = true;//'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['couleur_foncer'] = true;//'inc/filtres_images_mini.php'; +$GLOBALS['spip_matrice']['couleur_eclaircir'] = true;//'inc/filtres_images_mini.php'; // ou pour inclure un script au moment ou l'on cherche le filtre $GLOBALS['spip_matrice']['filtre_image_dist'] = 'inc/filtres_mime.php'; @@ -140,9 +142,10 @@ $GLOBALS['spip_matrice']['filtre_audio_x_pn_realaudio'] = 'inc/filtres_mime.php' // charge les fonctions graphiques et applique celle demandee // http://doc.spip.org/@filtrer function filtrer($filtre) { - include_spip('public/parametrer'); // charger les fichiers fonctions - if (is_string($f = $GLOBALS['spip_matrice'][$filtre])) + if (is_string($f = $GLOBALS['spip_matrice'][$filtre])){ find_in_path($f,'', true); + $GLOBALS['spip_matrice'][$filtre] = true; + } $tous = func_get_args(); if (substr($filtre,0,6)=='image_' && $GLOBALS['spip_matrice'][$filtre]) return image_filtrer($tous); @@ -2603,7 +2606,6 @@ function filtre_print_dist($u, $join=', ') { * @return string */ function objet_info($objet,$info){ - include_spip('base/objets'); $table = table_objet_sql($objet); $infos = lister_tables_objets_sql($table); return (isset($infos[$info])?$infos[$info]:''); diff --git a/ecrire/inc/pipelines.php b/ecrire/inc/pipelines.php index 36a428adba44f0766ce17598e5457fe5f1a204a3..0fdfbfc9818f516e2c6d10d8f5c47f67863000b7 100644 --- a/ecrire/inc/pipelines.php +++ b/ecrire/inc/pipelines.php @@ -11,6 +11,8 @@ \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) return; +if (test_espace_prive()) + include_spip('inc/pipelines_ecrire'); // Inserer jQuery @@ -29,7 +31,6 @@ function f_jQuery ($texte) { 'javascript/ajaxCallback.js', 'javascript/jquery.cookie.js' )); - include_spip('inc/pipelines_ecrire'); $jqueryui_plugins = jqueryui_dependances(pipeline('jqueryui_plugins', array( 'jquery.ui.core', @@ -108,7 +109,6 @@ function f_admin ($texte) { function f_recuperer_fond($flux) { if (!test_espace_prive()) return $flux; - include_spip('inc/pipelines_ecrire'); return f_afficher_blocs_ecrire($flux); } diff --git a/ecrire/inc/pipelines_ecrire.php b/ecrire/inc/pipelines_ecrire.php index 83c80a936b302bbba78cf06a984e71cb99221a18..139ddf5ab9c65402dbc10a707fd5db3f6226af07 100644 --- a/ecrire/inc/pipelines_ecrire.php +++ b/ecrire/inc/pipelines_ecrire.php @@ -283,7 +283,6 @@ function trouver_objet_exec($exec){ if (!$exec) return false; if (!isset($objet_exec[$exec])){ $objet_exec[$exec]=false; - include_spip('base/objets'); $infos = lister_tables_objets_sql(); foreach($infos as $t=>$info){ if ($exec==$info['url_edit'] AND $info['editable']){ diff --git a/ecrire/inc/presenter_enfants.php b/ecrire/inc/presenter_enfants.php index 3fe702a86d6975e2d5057435324ff3d480115197..50e3b24938be9869b9630c87e5fb18525bc9bb28 100644 --- a/ecrire/inc/presenter_enfants.php +++ b/ecrire/inc/presenter_enfants.php @@ -23,6 +23,7 @@ function enfant_rub($collection){ if ($voir_logo) { $chercher_logo = charger_fonction('chercher_logo', 'inc'); + include_spip('inc/filtres_images_mini'); } $res = array(); @@ -43,7 +44,6 @@ function enfant_rub($collection){ if ($voir_logo) { if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) { list($fid, $dir, $nom, $format) = $logo; - include_spip('inc/filtres_images_mini'); $logo = image_reduire("<img src='$fid' alt='' />", 48, 36); if ($logo) $logo = inserer_attribut($logo,'class','logo'); diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php index 344ca12fd13815916e20ac27f428903fe9f764cd..f72b6fe11ca54000dc7db288730e55788c75ee82 100644 --- a/ecrire/inc/rubriques.php +++ b/ecrire/inc/rubriques.php @@ -294,6 +294,9 @@ function calculer_langues_rubriques() { // site public // http://doc.spip.org/@calculer_langues_utilisees function calculer_langues_utilisees ($serveur='') { + include_spip('public/interfaces'); + include_spip('public/compiler'); + include_spip('public/composer'); $langues = array(); $langues[$GLOBALS['meta']['langue_site']] = 1; @@ -309,7 +312,6 @@ function calculer_langues_utilisees ($serveur='') { AND isset($desc['field']['lang']) AND isset($desc['field']['langue_choisie'])){ - include_spip('public/interfaces'); $boucle = new Boucle(); $boucle->show = $desc; $boucle->nom = 'calculer_langues_utilisees'; @@ -320,8 +322,6 @@ function calculer_langues_utilisees ($serveur='') { $boucle->from[$desc['table_objet']] = $t; if (isset($desc['statut']) AND $desc['statut']){ - include_spip('public/compiler'); - include_spip('public/composer'); instituer_boucle($boucle, false); $res = calculer_select($boucle->select,$boucle->from,$boucle->from_type,$boucle->where,$boucle->join,$boucle->group,$boucle->order,$boucle->limit,$boucle->having,$desc['table_objet'],$desc['table_objet'],$serveur); } diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php index b91020db052fb5762dfd3c461475a89cf97d8f26..2f33e3004e20c0f3c914d7953e444841751dd550 100644 --- a/ecrire/inc/urls.php +++ b/ecrire/inc/urls.php @@ -11,6 +11,7 @@ \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) return; +include_spip('base/objets'); /** * Decoder une url en utilisant les fonctions inverse @@ -121,7 +122,6 @@ function urls_liste_objets($preg = true){ if (is_null($url_objets)){ $url_objets = array(); // recuperer les tables_objets_sql declarees - include_spip('base/objets'); $tables_objets = lister_tables_objets_sql(); foreach($tables_objets as $t=>$infos){ if ($infos['page']) { diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 6975e9105ff11d29184864dddfb6854c7cf5eeab..a57bbaaceadfb3a204558d8b7a74b0a48221589b 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -32,10 +32,13 @@ if (!defined('_LOG_DEBUG')) define('_LOG_DEBUG', 7); // Peut etre appelee plusieurs fois, donc optimiser // http://doc.spip.org/@charger_fonction function charger_fonction($nom, $dossier='exec', $continue=false) { + static $echecs = array(); if (strlen($dossier) AND substr($dossier,-1) != '/') $dossier .= '/'; + $f = str_replace('/','_',$dossier) . $nom; + if (isset($echecs[$f])) return $echecs[$f]; - if (function_exists($f = str_replace('/','_',$dossier) . $nom)) + if (function_exists($f)) return $f; if (function_exists($g = $f . '_dist')) return $g; @@ -55,7 +58,7 @@ function charger_fonction($nom, $dossier='exec', $continue=false) { if (function_exists($f)) return $f; if (function_exists($g)) return $g; - if ($continue) return false; + if ($continue) return $echecs[$f] = false; // Echec : message d'erreur spip_log("fonction $nom ($f ou $g) indisponible" . @@ -1027,7 +1030,8 @@ function generer_url_entite($id='', $entite='', $args='', $ancre='', $public=NUL if (!$public) { if (!$entite) return ''; - include_spip('inc/urls'); + if (!function_exists('generer_url_ecrire_objet')) + include_spip('inc/urls'); $res = generer_url_ecrire_objet($entite,$id, $args, $ancre, false); } else { if ($type === NULL) { @@ -1861,7 +1865,6 @@ function verifier_visiteur() { // http://doc.spip.org/@lang_select function lang_select ($lang=NULL) { static $pile_langues = array(); - include_spip('inc/lang'); if ($lang === NULL) $lang = array_pop($pile_langues); else { @@ -1943,7 +1946,8 @@ function erreur_squelette($message='', $lieu='') { */ // http://doc.spip.org/@recuperer_fond function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='') { - include_spip('public/assembler'); + if (!function_exists('evaluer_fond')) + include_spip('public/assembler'); // assurer la compat avec l'ancienne syntaxe // (trim etait le 3eme argument, par defaut a true) if (!is_array($options)) $options = array('trim'=>$options); @@ -1982,7 +1986,8 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect=' 'data'=>$page )); if (isset($options['ajax']) AND $options['ajax']){ - include_spip('inc/filtres'); + if (!function_exists('encoder_contexte_ajax')) + include_spip('inc/filtres'); $page['texte'] = encoder_contexte_ajax(array_merge($contexte,array('fond'=>$f)),'',$page['texte'], $options['ajax']); } @@ -2037,19 +2042,21 @@ function trouver_fond($nom, $dir='', $pathinfo = false) { } function tester_url_ecrire($nom){ + static $exec=array(); + if (isset($exec[$nom])) return $exec[$nom]; // tester si c'est une page en squelette if (trouver_fond($nom, 'prive/squelettes/contenu/')) - return 'fond'; + return $exec[$nom] = 'fond'; // compat skels orthogonaux version precedente elseif (trouver_fond($nom, 'prive/exec/')) - return 'fond_monobloc'; + return $exec[$nom] = 'fond_monobloc'; // echaffaudage d'un fond ! elseif(include_spip('public/styliser_par_z') AND z_echaffaudable($nom)) - return 'fond'; + return $exec[$nom] = 'fond'; // attention, il ne faut pas inclure l'exec ici // car sinon #URL_ECRIRE provoque des inclusions // et des define intrusifs potentiels - return (find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:''; + return $exec[$nom] = ((find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:''); } // Charger dynamiquement une extension php diff --git a/ecrire/iterateur/data.php b/ecrire/iterateur/data.php index b2f7b41904335fa5e69cea182ba9c415989c59c6..9d434a23f7bd5714a1ab3b97ecf67c48978a86fe 100644 --- a/ecrire/iterateur/data.php +++ b/ecrire/iterateur/data.php @@ -159,7 +159,9 @@ class IterateurDATA implements Iterator { # un peu crado : avant de charger le cache il faut charger # les class indispensables, sinon PHP ne saura pas gerer # l'objet en cache ; cf plugins/icalendar - if (isset($this->command['sourcemode'])) + # perf : pas de fonction table_to_array ! (table est deja un array) + if (isset($this->command['sourcemode']) + AND !in_array($this->command['sourcemode'],array('table', 'array', 'tableau'))) charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true); # le premier argument peut etre un array, une URL etc. @@ -197,29 +199,30 @@ class IterateurDATA implements Iterator { ) $this->tableau = $a; } - else if (preg_match(',^https?://,', $src)) { - include_spip('inc/distant'); - $u = recuperer_page($src); - if (!$u) - throw new Exception("404"); - if (!isset($ttl)) $ttl = 24*3600; - } else if (@is_dir($src)) { - $u = $src; - if (!isset($ttl)) $ttl = 10; - } else if (@is_readable($src) && @is_file($src)) { - $u = spip_file_get_contents($src); - if (!isset($ttl)) $ttl = 10; - } else { - $u = $src; - if (!isset($ttl)) $ttl = 10; - } - - if (!$this->err - AND $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true)) { - $args = $this->command['source']; - $args[0] = $u; - if (is_array($a = call_user_func_array($g,$args))) { - $this->tableau = $a; + else { + if (preg_match(',^https?://,', $src)) { + include_spip('inc/distant'); + $u = recuperer_page($src); + if (!$u) + throw new Exception("404"); + if (!isset($ttl)) $ttl = 24*3600; + } else if (@is_dir($src)) { + $u = $src; + if (!isset($ttl)) $ttl = 10; + } else if (@is_readable($src) && @is_file($src)) { + $u = spip_file_get_contents($src); + if (!isset($ttl)) $ttl = 10; + } else { + $u = $src; + if (!isset($ttl)) $ttl = 10; + } + if (!$this->err + AND $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true)) { + $args = $this->command['source']; + $args[0] = $u; + if (is_array($a = call_user_func_array($g,$args))) { + $this->tableau = $a; + } } } diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index 11c430ce503bf6bdf9a9b0f57e8b6311417985f9..45d7c7e56682fd2c72b80995391d7fd54f8a7702 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -542,7 +542,6 @@ function memoriser_contexte_compil($p) { function reconstruire_contexte_compil($context_compil) { if (!is_array($context_compil)) return $context_compil; - include_spip('public/interfaces'); $p = new Contexte; $p->descr = array('sourcefile' => $context_compil[0], 'nom' => $context_compil[1]); diff --git a/ecrire/public/iterateur.php b/ecrire/public/iterateur.php index 07a2745405654071ac75567936797b51f225590d..fc24f9b0e7bbcfd3557578b64a57ef76eb0109a9 100644 --- a/ecrire/public/iterateur.php +++ b/ecrire/public/iterateur.php @@ -66,14 +66,15 @@ class IterFactory{ // IterateurXXX // definie dans le fichier iterateurs/xxx.php $class = "Iterateur".$iterateur; - if (!include_spip("iterateur/" . strtolower($iterateur)) - OR !class_exists($class)) { - die("Iterateur $iterateur non trouvé"); - // si l'iterateur n'existe pas, on se rabat sur le generique - $iter = new EmptyIterator(); - } else { - $iter = new $class($command, $info); + if (!class_exists($class)){ + if (!include_spip("iterateur/" . strtolower($iterateur)) + OR !class_exists($class)) { + die("Iterateur $iterateur non trouvé"); + // si l'iterateur n'existe pas, on se rabat sur le generique + # $iter = new EmptyIterator(); + } } + $iter = new $class($command, $info); } return new IterDecorator($iter, $command, $info); } diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php index 7371ab213889cecf1ec649a228c38f4a1286d1fc..f8c45b84f0b5ff26c46413c4035ba12998539c50 100644 --- a/ecrire/public/parametrer.php +++ b/ecrire/public/parametrer.php @@ -13,7 +13,6 @@ if (!defined('_ECRIRE_INC_VERSION')) return; include_spip('inc/lang'); -include_spip('public/quete'); // pour quete_virtuel et ses dependances // NB: mes_fonctions peut initialiser $dossier_squelettes (old-style) // donc il faut l'inclure "en globals" @@ -202,6 +201,7 @@ function tester_redirection($fond, $contexte, $connect) { if ($fond == 'article' AND $id_article = intval($contexte['id_article'])) { + include_spip('public/quete'); // pour quete_virtuel et ses dependances $m = quete_virtuel($id_article, $connect); if (strlen($m)) { include_spip('inc/texte'); diff --git a/ecrire/public/styliser.php b/ecrire/public/styliser.php index 31b80ca51135b496e1d061fcebcf9b6bd7cd04e4..086da52ad330ba3f369eb9759dc6de2e417e3f41 100644 --- a/ecrire/public/styliser.php +++ b/ecrire/public/styliser.php @@ -117,8 +117,10 @@ function styliser_par_objets($flux){ function quete_rubrique_fond($contexte) { static $liste_objets = null; static $quete = array(); - if (!$liste_objets) { + if (is_null($liste_objets)) { + $liste_objets = array(); include_spip('inc/urls'); + include_spip('public/quete'); $l = urls_liste_objets(false); // placer la rubrique en tete des objets $l = array_diff($l,array('rubrique')); diff --git a/ecrire/public/styliser_par_z.php b/ecrire/public/styliser_par_z.php index ce40ed4314ef7934da0e56b63ddc8de38646e004..4fc2a0c5a3d07d299bdbe69b51fbe506b62e4861 100644 --- a/ecrire/public/styliser_par_z.php +++ b/ecrire/public/styliser_par_z.php @@ -257,7 +257,8 @@ function z_echaffaudable($type){ return $echaffaudable[$type] = false; if (test_espace_prive()){ - include_spip('inc/pipelines_ecrire'); + if (!function_exists('trouver_objet_exec')) + include_spip('inc/pipelines_ecrire'); if ($e=trouver_objet_exec($type)){ return $echaffaudable[$type] = array($e['table'],$e['table_objet_sql'],$e); }