@@ -15,7 +15,7 @@ discard block |
||
| 15 | 15 | * @package SPIP\Core\Fonctions |
| 16 | 16 | **/ |
| 17 | 17 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 18 | - return; |
|
| 18 | + return; |
|
| 19 | 19 | } |
| 20 | 20 | |
| 21 | 21 | /** |
@@ -28,29 +28,29 @@ discard block |
||
| 28 | 28 | * @param bool $left |
| 29 | 29 | */ |
| 30 | 30 | function critere_compteur_articles_filtres_dist($idb, &$boucles, $crit, $left = false) { |
| 31 | - $boucle = &$boucles[$idb]; |
|
| 31 | + $boucle = &$boucles[$idb]; |
|
| 32 | 32 | |
| 33 | - $_statut = calculer_liste($crit->param[0], [], $boucles, $boucle->id_parent); |
|
| 33 | + $_statut = calculer_liste($crit->param[0], [], $boucles, $boucle->id_parent); |
|
| 34 | 34 | |
| 35 | - $not = ''; |
|
| 36 | - if ($crit->not) { |
|
| 37 | - $not = ", 'NOT'"; |
|
| 38 | - } |
|
| 39 | - $boucle->from['LAA'] = 'spip_auteurs_liens'; |
|
| 40 | - $boucle->from_type['LAA'] = 'left'; |
|
| 41 | - $boucle->join['LAA'] = ["'auteurs'", "'id_auteur'", "'id_auteur'", "'LAA.objet=\'article\''"]; |
|
| 35 | + $not = ''; |
|
| 36 | + if ($crit->not) { |
|
| 37 | + $not = ", 'NOT'"; |
|
| 38 | + } |
|
| 39 | + $boucle->from['LAA'] = 'spip_auteurs_liens'; |
|
| 40 | + $boucle->from_type['LAA'] = 'left'; |
|
| 41 | + $boucle->join['LAA'] = ["'auteurs'", "'id_auteur'", "'id_auteur'", "'LAA.objet=\'article\''"]; |
|
| 42 | 42 | |
| 43 | - $boucle->from['articles'] = 'spip_articles'; |
|
| 44 | - $boucle->from_type['articles'] = 'left'; |
|
| 45 | - $boucle->join['articles'] = [ |
|
| 46 | - "'LAA'", |
|
| 47 | - "'id_article'", |
|
| 48 | - "'id_objet'", |
|
| 49 | - "'(articles.statut IS NULL OR '.sql_in_quote('articles.statut',[$_statut]$not).')'" |
|
| 50 | - ]; |
|
| 43 | + $boucle->from['articles'] = 'spip_articles'; |
|
| 44 | + $boucle->from_type['articles'] = 'left'; |
|
| 45 | + $boucle->join['articles'] = [ |
|
| 46 | + "'LAA'", |
|
| 47 | + "'id_article'", |
|
| 48 | + "'id_objet'", |
|
| 49 | + "'(articles.statut IS NULL OR '.sql_in_quote('articles.statut',[$_statut]$not).')'" |
|
| 50 | + ]; |
|
| 51 | 51 | |
| 52 | - $boucle->select[] = 'COUNT(articles.id_article) AS compteur_articles'; |
|
| 53 | - $boucle->group[] = 'auteurs.id_auteur'; |
|
| 52 | + $boucle->select[] = 'COUNT(articles.id_article) AS compteur_articles'; |
|
| 53 | + $boucle->group[] = 'auteurs.id_auteur'; |
|
| 54 | 54 | } |
| 55 | 55 | |
| 56 | 56 | /** |
@@ -68,7 +68,7 @@ discard block |
||
| 68 | 68 | * Pile complétée par le code à générer |
| 69 | 69 | */ |
| 70 | 70 | function balise_COMPTEUR_ARTICLES_dist($p) { |
| 71 | - return rindex_pile($p, 'compteur_articles', 'compteur_articles_filtres'); |
|
| 71 | + return rindex_pile($p, 'compteur_articles', 'compteur_articles_filtres'); |
|
| 72 | 72 | } |
| 73 | 73 | |
| 74 | 74 | |
@@ -84,37 +84,37 @@ discard block |
||
| 84 | 84 | * @return string |
| 85 | 85 | */ |
| 86 | 86 | function afficher_initiale($url, $initiale, $compteur, $debut, $pas) { |
| 87 | - static $memo = null; |
|
| 88 | - static $res = []; |
|
| 89 | - $out = ''; |
|
| 90 | - if (!$memo || !$initiale && !$url || $initiale !== $memo['initiale']) { |
|
| 91 | - $newcompt = (int) (floor(($compteur - 1) / $pas) * $pas); |
|
| 92 | - // si fin de la pagination et une seule entree, ne pas l'afficher, ca ne sert a rien |
|
| 93 | - if (!$initiale && !$url && !$memo['compteur']) { |
|
| 94 | - $memo = null; |
|
| 95 | - } |
|
| 96 | - if ($memo) { |
|
| 97 | - $on = ($memo['compteur'] <= $debut && ($newcompt > $debut || $newcompt == $debut && $newcompt == $memo['compteur'])); |
|
| 98 | - $res[] = "<li class='pagination-item'>" . lien_ou_expose($memo['url'], $memo['initiale'], $on ? 'span.pagination-item-label' : '', 'pagination-item-label lien_pagination') . '</li>'; |
|
| 99 | - } |
|
| 100 | - if ($initiale) { |
|
| 101 | - $memo = [ |
|
| 102 | - 'entree' => isset($memo['entree']) ? $memo['entree'] + 1 : 0, |
|
| 103 | - 'initiale' => $initiale, |
|
| 104 | - 'url' => parametre_url($url, 'i', $initiale), |
|
| 105 | - 'compteur' => $newcompt |
|
| 106 | - ]; |
|
| 107 | - } |
|
| 108 | - } |
|
| 109 | - if (!$initiale && !$url) { |
|
| 110 | - if ((is_countable($res) ? count($res) : 0) > 1) { |
|
| 111 | - $out = "<ul class='pagination-items'>" . implode(' ', $res) . '</ul>'; |
|
| 112 | - } |
|
| 113 | - $memo = null; |
|
| 114 | - $res = []; |
|
| 115 | - } |
|
| 87 | + static $memo = null; |
|
| 88 | + static $res = []; |
|
| 89 | + $out = ''; |
|
| 90 | + if (!$memo || !$initiale && !$url || $initiale !== $memo['initiale']) { |
|
| 91 | + $newcompt = (int) (floor(($compteur - 1) / $pas) * $pas); |
|
| 92 | + // si fin de la pagination et une seule entree, ne pas l'afficher, ca ne sert a rien |
|
| 93 | + if (!$initiale && !$url && !$memo['compteur']) { |
|
| 94 | + $memo = null; |
|
| 95 | + } |
|
| 96 | + if ($memo) { |
|
| 97 | + $on = ($memo['compteur'] <= $debut && ($newcompt > $debut || $newcompt == $debut && $newcompt == $memo['compteur'])); |
|
| 98 | + $res[] = "<li class='pagination-item'>" . lien_ou_expose($memo['url'], $memo['initiale'], $on ? 'span.pagination-item-label' : '', 'pagination-item-label lien_pagination') . '</li>'; |
|
| 99 | + } |
|
| 100 | + if ($initiale) { |
|
| 101 | + $memo = [ |
|
| 102 | + 'entree' => isset($memo['entree']) ? $memo['entree'] + 1 : 0, |
|
| 103 | + 'initiale' => $initiale, |
|
| 104 | + 'url' => parametre_url($url, 'i', $initiale), |
|
| 105 | + 'compteur' => $newcompt |
|
| 106 | + ]; |
|
| 107 | + } |
|
| 108 | + } |
|
| 109 | + if (!$initiale && !$url) { |
|
| 110 | + if ((is_countable($res) ? count($res) : 0) > 1) { |
|
| 111 | + $out = "<ul class='pagination-items'>" . implode(' ', $res) . '</ul>'; |
|
| 112 | + } |
|
| 113 | + $memo = null; |
|
| 114 | + $res = []; |
|
| 115 | + } |
|
| 116 | 116 | |
| 117 | - return $out; |
|
| 117 | + return $out; |
|
| 118 | 118 | } |
| 119 | 119 | |
| 120 | 120 | /** |
@@ -133,24 +133,24 @@ discard block |
||
| 133 | 133 | * @return string |
| 134 | 134 | */ |
| 135 | 135 | function auteur_lien_messagerie($id_auteur, $en_ligne, $statut, $imessage, $email = '') { |
| 136 | - static $time = null; |
|
| 137 | - if (!in_array($statut, ['0minirezo', '1comite'])) { |
|
| 138 | - return ''; |
|
| 139 | - } |
|
| 136 | + static $time = null; |
|
| 137 | + if (!in_array($statut, ['0minirezo', '1comite'])) { |
|
| 138 | + return ''; |
|
| 139 | + } |
|
| 140 | 140 | |
| 141 | - if (is_null($time)) { |
|
| 142 | - $time = time(); |
|
| 143 | - } |
|
| 144 | - $parti = (($time - strtotime($en_ligne)) > 15 * 60); |
|
| 141 | + if (is_null($time)) { |
|
| 142 | + $time = time(); |
|
| 143 | + } |
|
| 144 | + $parti = (($time - strtotime($en_ligne)) > 15 * 60); |
|
| 145 | 145 | |
| 146 | - if ( |
|
| 147 | - $imessage != 'non' && !$parti // historique : est-ce que ca a encore un sens de limiter vu qu'on a la notification par email ? |
|
| 148 | - && $GLOBALS['meta']['messagerie_agenda'] != 'non' |
|
| 149 | - ) { |
|
| 150 | - return parametre_url(parametre_url(generer_url_ecrire('message_edit', 'new=oui'), 'to', $id_auteur), 'redirect', self()); |
|
| 151 | - } elseif (strlen($email) && autoriser('voir', 'auteur', $id_auteur)) { |
|
| 152 | - return 'mailto:' . $email; |
|
| 153 | - } else { |
|
| 154 | - return ''; |
|
| 155 | - } |
|
| 146 | + if ( |
|
| 147 | + $imessage != 'non' && !$parti // historique : est-ce que ca a encore un sens de limiter vu qu'on a la notification par email ? |
|
| 148 | + && $GLOBALS['meta']['messagerie_agenda'] != 'non' |
|
| 149 | + ) { |
|
| 150 | + return parametre_url(parametre_url(generer_url_ecrire('message_edit', 'new=oui'), 'to', $id_auteur), 'redirect', self()); |
|
| 151 | + } elseif (strlen($email) && autoriser('voir', 'auteur', $id_auteur)) { |
|
| 152 | + return 'mailto:' . $email; |
|
| 153 | + } else { |
|
| 154 | + return ''; |
|
| 155 | + } |
|
| 156 | 156 | } |
@@ -10,24 +10,24 @@ |
||
| 10 | 10 | \***************************************************************************/ |
| 11 | 11 | |
| 12 | 12 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 13 | - return; |
|
| 13 | + return; |
|
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | function lister_traductions($id_trad, $objet) { |
| 17 | - $table_objet_sql = table_objet_sql($objet); |
|
| 18 | - $primary = id_table_objet($objet); |
|
| 17 | + $table_objet_sql = table_objet_sql($objet); |
|
| 18 | + $primary = id_table_objet($objet); |
|
| 19 | 19 | |
| 20 | - $select = "$primary as id,lang"; |
|
| 21 | - $where = 'id_trad=' . (int) $id_trad; |
|
| 22 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 23 | - $desc = $trouver_table($table_objet_sql); |
|
| 24 | - if (isset($desc['field']['statut'])) { |
|
| 25 | - $select .= ',statut'; |
|
| 26 | - $where .= ' AND statut!=' . sql_quote('poubelle'); |
|
| 27 | - } |
|
| 20 | + $select = "$primary as id,lang"; |
|
| 21 | + $where = 'id_trad=' . (int) $id_trad; |
|
| 22 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 23 | + $desc = $trouver_table($table_objet_sql); |
|
| 24 | + if (isset($desc['field']['statut'])) { |
|
| 25 | + $select .= ',statut'; |
|
| 26 | + $where .= ' AND statut!=' . sql_quote('poubelle'); |
|
| 27 | + } |
|
| 28 | 28 | |
| 29 | - $rows = sql_allfetsel($select, $table_objet_sql, $where); |
|
| 30 | - lang_select(); |
|
| 29 | + $rows = sql_allfetsel($select, $table_objet_sql, $where); |
|
| 30 | + lang_select(); |
|
| 31 | 31 | |
| 32 | - return $rows; |
|
| 32 | + return $rows; |
|
| 33 | 33 | } |
@@ -10,7 +10,7 @@ discard block |
||
| 10 | 10 | \***************************************************************************/ |
| 11 | 11 | |
| 12 | 12 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 13 | - return; |
|
| 13 | + return; |
|
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | /** |
@@ -23,9 +23,9 @@ discard block |
||
| 23 | 23 | */ |
| 24 | 24 | function deplacement_restreint($objet, $statut) { |
| 25 | 25 | |
| 26 | - return match ($objet) { |
|
| 27 | - 'rubrique' => !$GLOBALS['connect_toutes_rubriques'], |
|
| 28 | - 'article', 'site', 'syndic', 'breve' => $statut == 'publie', |
|
| 29 | - default => $statut ? $statut == 'publie' : false, |
|
| 30 | - }; |
|
| 26 | + return match ($objet) { |
|
| 27 | + 'rubrique' => !$GLOBALS['connect_toutes_rubriques'], |
|
| 28 | + 'article', 'site', 'syndic', 'breve' => $statut == 'publie', |
|
| 29 | + default => $statut ? $statut == 'publie' : false, |
|
| 30 | + }; |
|
| 31 | 31 | } |
@@ -10,77 +10,77 @@ |
||
| 10 | 10 | \***************************************************************************/ |
| 11 | 11 | |
| 12 | 12 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 13 | - return; |
|
| 13 | + return; |
|
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | function install_etape_ldap3_dist() { |
| 17 | - $info = []; |
|
| 18 | - $adresse_ldap = _request('adresse_ldap'); |
|
| 19 | - $login_ldap = _request('login_ldap'); |
|
| 20 | - $pass_ldap = _request('pass_ldap'); |
|
| 21 | - $port_ldap = _request('port_ldap'); |
|
| 17 | + $info = []; |
|
| 18 | + $adresse_ldap = _request('adresse_ldap'); |
|
| 19 | + $login_ldap = _request('login_ldap'); |
|
| 20 | + $pass_ldap = _request('pass_ldap'); |
|
| 21 | + $port_ldap = _request('port_ldap'); |
|
| 22 | 22 | |
| 23 | - $base_ldap_text = defined('_INSTALL_BASE_LDAP') |
|
| 24 | - ? _INSTALL_BASE_LDAP |
|
| 25 | - : 'ou=users, dc=mon-domaine, dc=com'; |
|
| 23 | + $base_ldap_text = defined('_INSTALL_BASE_LDAP') |
|
| 24 | + ? _INSTALL_BASE_LDAP |
|
| 25 | + : 'ou=users, dc=mon-domaine, dc=com'; |
|
| 26 | 26 | |
| 27 | - $minipage = new Spip\Afficher\Minipage\Installation(); |
|
| 28 | - echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']); |
|
| 27 | + $minipage = new Spip\Afficher\Minipage\Installation(); |
|
| 28 | + echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']); |
|
| 29 | 29 | |
| 30 | - echo info_etape( |
|
| 31 | - _T('info_chemin_acces_1'), |
|
| 32 | - info_progression_etape(3, 'etape_ldap', 'install/') |
|
| 33 | - ), |
|
| 34 | - _T('info_chemin_acces_2'); |
|
| 30 | + echo info_etape( |
|
| 31 | + _T('info_chemin_acces_1'), |
|
| 32 | + info_progression_etape(3, 'etape_ldap', 'install/') |
|
| 33 | + ), |
|
| 34 | + _T('info_chemin_acces_2'); |
|
| 35 | 35 | |
| 36 | - $ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap"); |
|
| 37 | - if ($ldap_link) { |
|
| 38 | - @ldap_bind($ldap_link, "$login_ldap", "$pass_ldap"); |
|
| 39 | - $result = @ldap_read($ldap_link, '', 'objectclass=*', ['namingContexts']); |
|
| 40 | - $info = @ldap_get_entries($ldap_link, $result); |
|
| 41 | - @ldap_close($ldap_link); |
|
| 42 | - } |
|
| 36 | + $ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap"); |
|
| 37 | + if ($ldap_link) { |
|
| 38 | + @ldap_bind($ldap_link, "$login_ldap", "$pass_ldap"); |
|
| 39 | + $result = @ldap_read($ldap_link, '', 'objectclass=*', ['namingContexts']); |
|
| 40 | + $info = @ldap_get_entries($ldap_link, $result); |
|
| 41 | + @ldap_close($ldap_link); |
|
| 42 | + } |
|
| 43 | 43 | |
| 44 | - $checked = false; |
|
| 45 | - $res = ''; |
|
| 46 | - if (is_array($info) && $info['count'] > 0) { |
|
| 47 | - $res .= '<p>' . _T('info_selection_chemin_acces') . '</p>'; |
|
| 48 | - $res .= '<ul>'; |
|
| 49 | - $n = 0; |
|
| 50 | - for ($i = 0; $i < $info['count']; $i++) { |
|
| 51 | - $names = $info[$i]['namingcontexts']; |
|
| 52 | - if (is_array($names)) { |
|
| 53 | - for ($j = 0; $j < $names['count']; $j++) { |
|
| 54 | - $n++; |
|
| 55 | - $res .= '<li><input name="base_ldap" value="' . spip_htmlspecialchars($names[$j]) . "\" type='radio' id='tab$n'"; |
|
| 56 | - if (!$checked) { |
|
| 57 | - $res .= ' checked="checked"'; |
|
| 58 | - $checked = true; |
|
| 59 | - } |
|
| 60 | - $res .= ' />'; |
|
| 61 | - $res .= "<label for='tab$n'>" . spip_htmlspecialchars($names[$j]) . "</label></li>\n"; |
|
| 62 | - } |
|
| 63 | - } |
|
| 64 | - } |
|
| 65 | - $res .= '</ul>'; |
|
| 66 | - $res .= _T('info_ou') . ' '; |
|
| 67 | - } |
|
| 68 | - $res .= "<br />\n<input name=\"base_ldap\" value=\"\" type='radio' id='manuel'"; |
|
| 69 | - if (!$checked) { |
|
| 70 | - $res .= ' checked="checked"'; |
|
| 71 | - $checked = true; |
|
| 72 | - } |
|
| 44 | + $checked = false; |
|
| 45 | + $res = ''; |
|
| 46 | + if (is_array($info) && $info['count'] > 0) { |
|
| 47 | + $res .= '<p>' . _T('info_selection_chemin_acces') . '</p>'; |
|
| 48 | + $res .= '<ul>'; |
|
| 49 | + $n = 0; |
|
| 50 | + for ($i = 0; $i < $info['count']; $i++) { |
|
| 51 | + $names = $info[$i]['namingcontexts']; |
|
| 52 | + if (is_array($names)) { |
|
| 53 | + for ($j = 0; $j < $names['count']; $j++) { |
|
| 54 | + $n++; |
|
| 55 | + $res .= '<li><input name="base_ldap" value="' . spip_htmlspecialchars($names[$j]) . "\" type='radio' id='tab$n'"; |
|
| 56 | + if (!$checked) { |
|
| 57 | + $res .= ' checked="checked"'; |
|
| 58 | + $checked = true; |
|
| 59 | + } |
|
| 60 | + $res .= ' />'; |
|
| 61 | + $res .= "<label for='tab$n'>" . spip_htmlspecialchars($names[$j]) . "</label></li>\n"; |
|
| 62 | + } |
|
| 63 | + } |
|
| 64 | + } |
|
| 65 | + $res .= '</ul>'; |
|
| 66 | + $res .= _T('info_ou') . ' '; |
|
| 67 | + } |
|
| 68 | + $res .= "<br />\n<input name=\"base_ldap\" value=\"\" type='radio' id='manuel'"; |
|
| 69 | + if (!$checked) { |
|
| 70 | + $res .= ' checked="checked"'; |
|
| 71 | + $checked = true; |
|
| 72 | + } |
|
| 73 | 73 | |
| 74 | - $res .= ' />' |
|
| 75 | - . "\n<label for='manuel'>" . _T('entree_chemin_acces') . '</label> ' |
|
| 76 | - . "\n<fieldset>" |
|
| 77 | - . "<input type='text' name='base_ldap_text' class='text' value=\"$base_ldap_text\" size='40' />" |
|
| 78 | - . "\n</fieldset>" |
|
| 79 | - . "\n<input type='hidden' name='etape' value='ldap4' />" |
|
| 80 | - . install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap']) |
|
| 81 | - . bouton_suivant(); |
|
| 74 | + $res .= ' />' |
|
| 75 | + . "\n<label for='manuel'>" . _T('entree_chemin_acces') . '</label> ' |
|
| 76 | + . "\n<fieldset>" |
|
| 77 | + . "<input type='text' name='base_ldap_text' class='text' value=\"$base_ldap_text\" size='40' />" |
|
| 78 | + . "\n</fieldset>" |
|
| 79 | + . "\n<input type='hidden' name='etape' value='ldap4' />" |
|
| 80 | + . install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap']) |
|
| 81 | + . bouton_suivant(); |
|
| 82 | 82 | |
| 83 | - echo generer_form_ecrire('install', $res); |
|
| 83 | + echo generer_form_ecrire('install', $res); |
|
| 84 | 84 | |
| 85 | - echo $minipage->installFinPage(); |
|
| 85 | + echo $minipage->installFinPage(); |
|
| 86 | 86 | } |
@@ -10,96 +10,96 @@ |
||
| 10 | 10 | \***************************************************************************/ |
| 11 | 11 | |
| 12 | 12 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 13 | - return; |
|
| 13 | + return; |
|
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | include_spip('auth/ldap'); |
| 17 | 17 | |
| 18 | 18 | function install_etape_ldap4_dist() { |
| 19 | - $adresse_ldap = _request('adresse_ldap'); |
|
| 20 | - $login_ldap = _request('login_ldap'); |
|
| 21 | - $pass_ldap = _request('pass_ldap'); |
|
| 22 | - $port_ldap = _request('port_ldap'); |
|
| 23 | - $base_ldap = _request('base_ldap'); |
|
| 24 | - $base_ldap_text = _request('base_ldap_text'); |
|
| 25 | - if (!$base_ldap) { |
|
| 26 | - $base_ldap = $base_ldap_text; |
|
| 27 | - } |
|
| 28 | - |
|
| 29 | - $minipage = new Spip\Afficher\Minipage\Installation(); |
|
| 30 | - echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']); |
|
| 31 | - |
|
| 32 | - $ldap_link = ldap_connect($adresse_ldap, $port_ldap); |
|
| 33 | - @ldap_bind($ldap_link, $login_ldap, $pass_ldap); |
|
| 34 | - |
|
| 35 | - // Essayer de verifier le chemin fourni |
|
| 36 | - $r = @ldap_compare($ldap_link, $base_ldap, 'objectClass', ''); |
|
| 37 | - $fail = (ldap_errno($ldap_link) == 32); |
|
| 38 | - |
|
| 39 | - if ($fail) { |
|
| 40 | - echo info_etape(_T('info_chemin_acces_annuaire')), |
|
| 41 | - info_progression_etape(3, 'etape_ldap', 'install/', true), |
|
| 42 | - "<div class='error'><p><b>" . _T('avis_operation_echec') . '</b></p><p>' . _T('avis_chemin_invalide_1'), |
|
| 43 | - ' (<tt>' . spip_htmlspecialchars($base_ldap) . '</tt>) ' . _T('avis_chemin_invalide_2') . '</p></div>'; |
|
| 44 | - } else { |
|
| 45 | - info_etape(_T('info_reglage_ldap')); |
|
| 46 | - echo info_progression_etape(4, 'etape_ldap', 'install/'); |
|
| 47 | - |
|
| 48 | - $statuts = liste_statuts_ldap(); |
|
| 49 | - $statut_ldap = defined('_INSTALL_STATUT_LDAP') |
|
| 50 | - ? _INSTALL_STATUT_LDAP |
|
| 51 | - : $GLOBALS['liste_des_statuts']['info_redacteurs']; |
|
| 52 | - |
|
| 53 | - |
|
| 54 | - $res = install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap']) |
|
| 55 | - . "<input type='hidden' name='etape' value='ldap5' />" |
|
| 56 | - . "<input type='hidden' name='base_ldap' value='" . spip_htmlentities($base_ldap) . "' />" |
|
| 57 | - . fieldset( |
|
| 58 | - _T('info_statut_utilisateurs_1'), |
|
| 59 | - [ |
|
| 60 | - 'statut_ldap' => [ |
|
| 61 | - 'label' => _T('info_statut_utilisateurs_2') . '<br />', |
|
| 62 | - 'valeur' => $statut_ldap, |
|
| 63 | - 'alternatives' => $statuts |
|
| 64 | - ] |
|
| 65 | - ] |
|
| 66 | - ) |
|
| 67 | - . install_ldap_correspondances() |
|
| 68 | - . bouton_suivant(); |
|
| 69 | - |
|
| 70 | - echo generer_form_ecrire('install', $res); |
|
| 71 | - } |
|
| 72 | - |
|
| 73 | - echo $minipage->installFinPage(); |
|
| 19 | + $adresse_ldap = _request('adresse_ldap'); |
|
| 20 | + $login_ldap = _request('login_ldap'); |
|
| 21 | + $pass_ldap = _request('pass_ldap'); |
|
| 22 | + $port_ldap = _request('port_ldap'); |
|
| 23 | + $base_ldap = _request('base_ldap'); |
|
| 24 | + $base_ldap_text = _request('base_ldap_text'); |
|
| 25 | + if (!$base_ldap) { |
|
| 26 | + $base_ldap = $base_ldap_text; |
|
| 27 | + } |
|
| 28 | + |
|
| 29 | + $minipage = new Spip\Afficher\Minipage\Installation(); |
|
| 30 | + echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']); |
|
| 31 | + |
|
| 32 | + $ldap_link = ldap_connect($adresse_ldap, $port_ldap); |
|
| 33 | + @ldap_bind($ldap_link, $login_ldap, $pass_ldap); |
|
| 34 | + |
|
| 35 | + // Essayer de verifier le chemin fourni |
|
| 36 | + $r = @ldap_compare($ldap_link, $base_ldap, 'objectClass', ''); |
|
| 37 | + $fail = (ldap_errno($ldap_link) == 32); |
|
| 38 | + |
|
| 39 | + if ($fail) { |
|
| 40 | + echo info_etape(_T('info_chemin_acces_annuaire')), |
|
| 41 | + info_progression_etape(3, 'etape_ldap', 'install/', true), |
|
| 42 | + "<div class='error'><p><b>" . _T('avis_operation_echec') . '</b></p><p>' . _T('avis_chemin_invalide_1'), |
|
| 43 | + ' (<tt>' . spip_htmlspecialchars($base_ldap) . '</tt>) ' . _T('avis_chemin_invalide_2') . '</p></div>'; |
|
| 44 | + } else { |
|
| 45 | + info_etape(_T('info_reglage_ldap')); |
|
| 46 | + echo info_progression_etape(4, 'etape_ldap', 'install/'); |
|
| 47 | + |
|
| 48 | + $statuts = liste_statuts_ldap(); |
|
| 49 | + $statut_ldap = defined('_INSTALL_STATUT_LDAP') |
|
| 50 | + ? _INSTALL_STATUT_LDAP |
|
| 51 | + : $GLOBALS['liste_des_statuts']['info_redacteurs']; |
|
| 52 | + |
|
| 53 | + |
|
| 54 | + $res = install_propager(['adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap']) |
|
| 55 | + . "<input type='hidden' name='etape' value='ldap5' />" |
|
| 56 | + . "<input type='hidden' name='base_ldap' value='" . spip_htmlentities($base_ldap) . "' />" |
|
| 57 | + . fieldset( |
|
| 58 | + _T('info_statut_utilisateurs_1'), |
|
| 59 | + [ |
|
| 60 | + 'statut_ldap' => [ |
|
| 61 | + 'label' => _T('info_statut_utilisateurs_2') . '<br />', |
|
| 62 | + 'valeur' => $statut_ldap, |
|
| 63 | + 'alternatives' => $statuts |
|
| 64 | + ] |
|
| 65 | + ] |
|
| 66 | + ) |
|
| 67 | + . install_ldap_correspondances() |
|
| 68 | + . bouton_suivant(); |
|
| 69 | + |
|
| 70 | + echo generer_form_ecrire('install', $res); |
|
| 71 | + } |
|
| 72 | + |
|
| 73 | + echo $minipage->installFinPage(); |
|
| 74 | 74 | } |
| 75 | 75 | |
| 76 | 76 | function liste_statuts_ldap() { |
| 77 | - $recom = [ |
|
| 78 | - 'info_administrateurs' => ('<b>' . _T('info_administrateur_1') . '</b> ' . _T('info_administrateur_2') . '<br />'), |
|
| 79 | - 'info_redacteurs' => ('<b>' . _T('info_redacteur_1') . '</b> ' . _T('info_redacteur_2') . '<br />'), |
|
| 80 | - 'info_visiteurs' => ('<b>' . _T('info_visiteur_1') . '</b> ' . _T('info_visiteur_2') . '<br />') |
|
| 81 | - ]; |
|
| 82 | - |
|
| 83 | - $res = []; |
|
| 84 | - foreach ($GLOBALS['liste_des_statuts'] as $k => $v) { |
|
| 85 | - if (isset($recom[$k])) { |
|
| 86 | - $res[$v] = $recom[$k]; |
|
| 87 | - } |
|
| 88 | - } |
|
| 89 | - |
|
| 90 | - return $res; |
|
| 77 | + $recom = [ |
|
| 78 | + 'info_administrateurs' => ('<b>' . _T('info_administrateur_1') . '</b> ' . _T('info_administrateur_2') . '<br />'), |
|
| 79 | + 'info_redacteurs' => ('<b>' . _T('info_redacteur_1') . '</b> ' . _T('info_redacteur_2') . '<br />'), |
|
| 80 | + 'info_visiteurs' => ('<b>' . _T('info_visiteur_1') . '</b> ' . _T('info_visiteur_2') . '<br />') |
|
| 81 | + ]; |
|
| 82 | + |
|
| 83 | + $res = []; |
|
| 84 | + foreach ($GLOBALS['liste_des_statuts'] as $k => $v) { |
|
| 85 | + if (isset($recom[$k])) { |
|
| 86 | + $res[$v] = $recom[$k]; |
|
| 87 | + } |
|
| 88 | + } |
|
| 89 | + |
|
| 90 | + return $res; |
|
| 91 | 91 | } |
| 92 | 92 | |
| 93 | 93 | function install_ldap_correspondances() { |
| 94 | - $champs = []; |
|
| 95 | - foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : [] as $champ => $v) { |
|
| 96 | - $nom = 'ldap_' . $champ; |
|
| 97 | - $val = is_array($v) ? implode(',', $v) : (string) $v; |
|
| 98 | - $champs[$nom] = [ |
|
| 99 | - 'label' => _T('ldap_correspondance', ['champ' => "<tt>$champ</tt>"]) . '<br />', |
|
| 100 | - 'valeur' => $val |
|
| 101 | - ]; |
|
| 102 | - } |
|
| 103 | - |
|
| 104 | - return $champs ? fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '<br /><br />') : ''; |
|
| 94 | + $champs = []; |
|
| 95 | + foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : [] as $champ => $v) { |
|
| 96 | + $nom = 'ldap_' . $champ; |
|
| 97 | + $val = is_array($v) ? implode(',', $v) : (string) $v; |
|
| 98 | + $champs[$nom] = [ |
|
| 99 | + 'label' => _T('ldap_correspondance', ['champ' => "<tt>$champ</tt>"]) . '<br />', |
|
| 100 | + 'valeur' => $val |
|
| 101 | + ]; |
|
| 102 | + } |
|
| 103 | + |
|
| 104 | + return $champs ? fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '<br /><br />') : ''; |
|
| 105 | 105 | } |
@@ -10,88 +10,88 @@ |
||
| 10 | 10 | \***************************************************************************/ |
| 11 | 11 | |
| 12 | 12 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 13 | - return; |
|
| 13 | + return; |
|
| 14 | 14 | } |
| 15 | 15 | |
| 16 | 16 | function install_etape_ldap2_dist() { |
| 17 | - $minipage = new Spip\Afficher\Minipage\Installation(); |
|
| 18 | - echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']); |
|
| 19 | - |
|
| 20 | - $adresse_ldap = _request('adresse_ldap'); |
|
| 21 | - |
|
| 22 | - $port_ldap = _request('port_ldap'); |
|
| 23 | - |
|
| 24 | - $tls_ldap = _request('tls_ldap'); |
|
| 25 | - |
|
| 26 | - $protocole_ldap = _request('protocole_ldap'); |
|
| 27 | - |
|
| 28 | - $login_ldap = _request('login_ldap'); |
|
| 29 | - |
|
| 30 | - $pass_ldap = _request('pass_ldap'); |
|
| 31 | - |
|
| 32 | - $port_ldap = (int) $port_ldap; |
|
| 33 | - |
|
| 34 | - $tls = false; |
|
| 35 | - |
|
| 36 | - if ($tls_ldap == 'oui') { |
|
| 37 | - if ($port_ldap == 636) { |
|
| 38 | - $adresse_ldap = "ldaps://$adresse_ldap"; |
|
| 39 | - } else { |
|
| 40 | - $tls = true; |
|
| 41 | - } |
|
| 42 | - } |
|
| 43 | - else { |
|
| 44 | - $tls_ldap == 'non'; |
|
| 45 | - } |
|
| 46 | - |
|
| 47 | - // Verifions que l'adresse demandee est valide |
|
| 48 | - $adresse_ldap = filter_var($adresse_ldap, FILTER_SANITIZE_URL) ?: ''; |
|
| 49 | - |
|
| 50 | - $ldap_link = ldap_connect($adresse_ldap, $port_ldap); |
|
| 51 | - $erreur = 'ldap_connect(' . spip_htmlspecialchars($adresse_ldap) . ', ' . spip_htmlspecialchars($port_ldap) . ')'; |
|
| 52 | - |
|
| 53 | - if ($ldap_link) { |
|
| 54 | - if (!ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap)) { |
|
| 55 | - $protocole_ldap = 2; |
|
| 56 | - ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap); |
|
| 57 | - } |
|
| 58 | - if ($tls && !ldap_start_tls($ldap_link)) { |
|
| 59 | - $erreur = 'ldap_start_tls(' . spip_htmlspecialchars($ldap_link) |
|
| 60 | - . ' ' . spip_htmlspecialchars($adresse_ldap) |
|
| 61 | - . ', ' . spip_htmlspecialchars($port_ldap) . ')'; |
|
| 62 | - $ldap_link = false; |
|
| 63 | - } |
|
| 64 | - if ($ldap_link) { |
|
| 65 | - $ldap_link = ldap_bind($ldap_link, $login_ldap, $pass_ldap); |
|
| 66 | - $erreur = "ldap_bind('" . spip_htmlspecialchars($ldap_link) |
|
| 67 | - . "', '" . spip_htmlspecialchars($login_ldap) |
|
| 68 | - . "', '" . spip_htmlspecialchars($pass_ldap) |
|
| 69 | - . "'): " . spip_htmlspecialchars($adresse_ldap) |
|
| 70 | - . ', ' . spip_htmlspecialchars($port_ldap); |
|
| 71 | - } |
|
| 72 | - } |
|
| 73 | - |
|
| 74 | - if ($ldap_link) { |
|
| 75 | - echo info_etape( |
|
| 76 | - _T('titre_connexion_ldap'), |
|
| 77 | - info_progression_etape(2, 'etape_ldap', 'install/') |
|
| 78 | - ), _T('info_connexion_ldap_ok'); |
|
| 79 | - echo generer_form_ecrire('install', ( |
|
| 80 | - "\n<input type='hidden' name='etape' value='ldap3' />" |
|
| 81 | - . "\n<input type='hidden' name='adresse_ldap' value=\"" . spip_htmlspecialchars($adresse_ldap) . '" />' |
|
| 82 | - . "\n<input type='hidden' name='port_ldap' value=\"" . spip_htmlspecialchars($port_ldap) . '" />' |
|
| 83 | - . "\n<input type='hidden' name='login_ldap' value=\"" . spip_htmlspecialchars($login_ldap) . '" />' |
|
| 84 | - . "\n<input type='hidden' name='pass_ldap' value=\"" . spip_htmlspecialchars($pass_ldap) . '" />' |
|
| 85 | - . "\n<input type='hidden' name='protocole_ldap' value=\"" . spip_htmlspecialchars($protocole_ldap) . '" />' |
|
| 86 | - . "\n<input type='hidden' name='tls_ldap' value=\"" . spip_htmlspecialchars($tls_ldap) . '" />' |
|
| 87 | - . bouton_suivant())); |
|
| 88 | - } else { |
|
| 89 | - echo info_etape(_T('titre_connexion_ldap')), info_progression_etape(1, 'etape_ldap', 'install/', true), |
|
| 90 | - "<div class='error'><p>" . _T('avis_connexion_ldap_echec_1') . '</p>', |
|
| 91 | - '<p>' . _T('avis_connexion_ldap_echec_2') . |
|
| 92 | - "<br />\n" . _T('avis_connexion_ldap_echec_3') . |
|
| 93 | - '<br /><br />' . $erreur . '<b> ?</b></p></div>'; |
|
| 94 | - } |
|
| 95 | - |
|
| 96 | - echo $minipage->installFinPage(); |
|
| 17 | + $minipage = new Spip\Afficher\Minipage\Installation(); |
|
| 18 | + echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']); |
|
| 19 | + |
|
| 20 | + $adresse_ldap = _request('adresse_ldap'); |
|
| 21 | + |
|
| 22 | + $port_ldap = _request('port_ldap'); |
|
| 23 | + |
|
| 24 | + $tls_ldap = _request('tls_ldap'); |
|
| 25 | + |
|
| 26 | + $protocole_ldap = _request('protocole_ldap'); |
|
| 27 | + |
|
| 28 | + $login_ldap = _request('login_ldap'); |
|
| 29 | + |
|
| 30 | + $pass_ldap = _request('pass_ldap'); |
|
| 31 | + |
|
| 32 | + $port_ldap = (int) $port_ldap; |
|
| 33 | + |
|
| 34 | + $tls = false; |
|
| 35 | + |
|
| 36 | + if ($tls_ldap == 'oui') { |
|
| 37 | + if ($port_ldap == 636) { |
|
| 38 | + $adresse_ldap = "ldaps://$adresse_ldap"; |
|
| 39 | + } else { |
|
| 40 | + $tls = true; |
|
| 41 | + } |
|
| 42 | + } |
|
| 43 | + else { |
|
| 44 | + $tls_ldap == 'non'; |
|
| 45 | + } |
|
| 46 | + |
|
| 47 | + // Verifions que l'adresse demandee est valide |
|
| 48 | + $adresse_ldap = filter_var($adresse_ldap, FILTER_SANITIZE_URL) ?: ''; |
|
| 49 | + |
|
| 50 | + $ldap_link = ldap_connect($adresse_ldap, $port_ldap); |
|
| 51 | + $erreur = 'ldap_connect(' . spip_htmlspecialchars($adresse_ldap) . ', ' . spip_htmlspecialchars($port_ldap) . ')'; |
|
| 52 | + |
|
| 53 | + if ($ldap_link) { |
|
| 54 | + if (!ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap)) { |
|
| 55 | + $protocole_ldap = 2; |
|
| 56 | + ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap); |
|
| 57 | + } |
|
| 58 | + if ($tls && !ldap_start_tls($ldap_link)) { |
|
| 59 | + $erreur = 'ldap_start_tls(' . spip_htmlspecialchars($ldap_link) |
|
| 60 | + . ' ' . spip_htmlspecialchars($adresse_ldap) |
|
| 61 | + . ', ' . spip_htmlspecialchars($port_ldap) . ')'; |
|
| 62 | + $ldap_link = false; |
|
| 63 | + } |
|
| 64 | + if ($ldap_link) { |
|
| 65 | + $ldap_link = ldap_bind($ldap_link, $login_ldap, $pass_ldap); |
|
| 66 | + $erreur = "ldap_bind('" . spip_htmlspecialchars($ldap_link) |
|
| 67 | + . "', '" . spip_htmlspecialchars($login_ldap) |
|
| 68 | + . "', '" . spip_htmlspecialchars($pass_ldap) |
|
| 69 | + . "'): " . spip_htmlspecialchars($adresse_ldap) |
|
| 70 | + . ', ' . spip_htmlspecialchars($port_ldap); |
|
| 71 | + } |
|
| 72 | + } |
|
| 73 | + |
|
| 74 | + if ($ldap_link) { |
|
| 75 | + echo info_etape( |
|
| 76 | + _T('titre_connexion_ldap'), |
|
| 77 | + info_progression_etape(2, 'etape_ldap', 'install/') |
|
| 78 | + ), _T('info_connexion_ldap_ok'); |
|
| 79 | + echo generer_form_ecrire('install', ( |
|
| 80 | + "\n<input type='hidden' name='etape' value='ldap3' />" |
|
| 81 | + . "\n<input type='hidden' name='adresse_ldap' value=\"" . spip_htmlspecialchars($adresse_ldap) . '" />' |
|
| 82 | + . "\n<input type='hidden' name='port_ldap' value=\"" . spip_htmlspecialchars($port_ldap) . '" />' |
|
| 83 | + . "\n<input type='hidden' name='login_ldap' value=\"" . spip_htmlspecialchars($login_ldap) . '" />' |
|
| 84 | + . "\n<input type='hidden' name='pass_ldap' value=\"" . spip_htmlspecialchars($pass_ldap) . '" />' |
|
| 85 | + . "\n<input type='hidden' name='protocole_ldap' value=\"" . spip_htmlspecialchars($protocole_ldap) . '" />' |
|
| 86 | + . "\n<input type='hidden' name='tls_ldap' value=\"" . spip_htmlspecialchars($tls_ldap) . '" />' |
|
| 87 | + . bouton_suivant())); |
|
| 88 | + } else { |
|
| 89 | + echo info_etape(_T('titre_connexion_ldap')), info_progression_etape(1, 'etape_ldap', 'install/', true), |
|
| 90 | + "<div class='error'><p>" . _T('avis_connexion_ldap_echec_1') . '</p>', |
|
| 91 | + '<p>' . _T('avis_connexion_ldap_echec_2') . |
|
| 92 | + "<br />\n" . _T('avis_connexion_ldap_echec_3') . |
|
| 93 | + '<br /><br />' . $erreur . '<b> ?</b></p></div>'; |
|
| 94 | + } |
|
| 95 | + |
|
| 96 | + echo $minipage->installFinPage(); |
|
| 97 | 97 | } |
@@ -19,178 +19,178 @@ discard block |
||
| 19 | 19 | **/ |
| 20 | 20 | |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - return; |
|
| 22 | + return; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | // En cas de modification, il faut aussi actualiser la regexp de nettoyer_uri_var() dans inc/utils.php |
| 26 | 26 | if (!defined('_CONTEXTE_IGNORE_VARIABLES')) { |
| 27 | - define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/'); |
|
| 27 | + define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/'); |
|
| 28 | 28 | } |
| 29 | 29 | |
| 30 | 30 | function assembler($fond, string $connect = '') { |
| 31 | 31 | |
| 32 | - $chemin_cache = null; |
|
| 33 | - $lastmodified = null; |
|
| 34 | - $res = null; |
|
| 35 | - // flag_preserver est modifie ici, et utilise en globale |
|
| 36 | - // use_cache sert a informer le bouton d'admin pr savoir s'il met un * |
|
| 37 | - // contexte est utilise en globale dans le formulaire d'admin |
|
| 38 | - |
|
| 39 | - $GLOBALS['contexte'] = calculer_contexte(); |
|
| 40 | - $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 41 | - $page['contexte_implicite']['cache'] = $fond . preg_replace( |
|
| 42 | - ',\.[a-zA-Z0-9]*$,', |
|
| 43 | - '', |
|
| 44 | - preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']) |
|
| 45 | - ); |
|
| 46 | - // Cette fonction est utilisee deux fois |
|
| 47 | - $cacher = charger_fonction('cacher', 'public', true); |
|
| 48 | - // Les quatre derniers parametres sont modifies par la fonction: |
|
| 49 | - // emplacement, validite, et, s'il est valide, contenu & age |
|
| 50 | - if ($cacher) { |
|
| 51 | - $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified); |
|
| 52 | - } else { |
|
| 53 | - $GLOBALS['use_cache'] = -1; |
|
| 54 | - } |
|
| 55 | - // Si un resultat est retourne, c'est un message d'impossibilite |
|
| 56 | - if ($res) { |
|
| 57 | - return ['texte' => $res]; |
|
| 58 | - } |
|
| 59 | - |
|
| 60 | - if (!$chemin_cache || !$lastmodified) { |
|
| 61 | - $lastmodified = time(); |
|
| 62 | - } |
|
| 63 | - |
|
| 64 | - $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); |
|
| 65 | - $calculer_page = true; |
|
| 66 | - |
|
| 67 | - // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) |
|
| 68 | - // une perennite valide a meme reponse qu'une requete HEAD (par defaut les |
|
| 69 | - // pages sont dynamiques) |
|
| 70 | - if ( |
|
| 71 | - isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 72 | - and (!defined('_VAR_MODE') or !_VAR_MODE) |
|
| 73 | - and $chemin_cache |
|
| 74 | - and isset($page['entetes']) |
|
| 75 | - and isset($page['entetes']['Cache-Control']) |
|
| 76 | - and strstr($page['entetes']['Cache-Control'], 'max-age=') |
|
| 77 | - and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/') |
|
| 78 | - ) { |
|
| 79 | - $since = preg_replace( |
|
| 80 | - '/;.*/', |
|
| 81 | - '', |
|
| 82 | - $_SERVER['HTTP_IF_MODIFIED_SINCE'] |
|
| 83 | - ); |
|
| 84 | - $since = str_replace('GMT', '', $since); |
|
| 85 | - if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) { |
|
| 86 | - $page['status'] = 304; |
|
| 87 | - $headers_only = true; |
|
| 88 | - $calculer_page = false; |
|
| 89 | - } |
|
| 90 | - } |
|
| 91 | - |
|
| 92 | - // Si requete HEAD ou Last-modified compatible, ignorer le texte |
|
| 93 | - // et pas de content-type (pour contrer le bouton admin de inc-public) |
|
| 94 | - if (!$calculer_page) { |
|
| 95 | - $page['texte'] = ''; |
|
| 96 | - } else { |
|
| 97 | - // si la page est prise dans le cache |
|
| 98 | - if (!$GLOBALS['use_cache']) { |
|
| 99 | - // Informer les boutons d'admin du contexte |
|
| 100 | - // (fourni par urls_decoder_url ci-dessous lors de la mise en cache) |
|
| 101 | - $GLOBALS['contexte'] = $page['contexte']; |
|
| 102 | - |
|
| 103 | - // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 104 | - // d'inversion url => objet |
|
| 105 | - // plus necessaire si on utilise bien la fonction urls_decoder_url |
|
| 106 | - #unset($_SERVER['REDIRECT_url_propre']); |
|
| 107 | - #unset($_ENV['url_propre']); |
|
| 108 | - } else { |
|
| 109 | - // Compat ascendante : |
|
| 110 | - // 1. $contexte est global |
|
| 111 | - // (a evacuer car urls_decoder_url gere ce probleme ?) |
|
| 112 | - // et calculer la page |
|
| 113 | - if (!test_espace_prive()) { |
|
| 114 | - include_spip('inc/urls'); |
|
| 115 | - [$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url( |
|
| 116 | - nettoyer_uri(), |
|
| 117 | - $fond, |
|
| 118 | - $GLOBALS['contexte'], |
|
| 119 | - true |
|
| 120 | - ); |
|
| 121 | - } |
|
| 122 | - // squelette par defaut |
|
| 123 | - if (!strlen($fond ?? '')) { |
|
| 124 | - $fond = 'sommaire'; |
|
| 125 | - } |
|
| 126 | - |
|
| 127 | - // produire la page : peut mettre a jour $lastmodified |
|
| 128 | - $produire_page = charger_fonction('produire_page', 'public'); |
|
| 129 | - $page = $produire_page( |
|
| 130 | - $fond, |
|
| 131 | - $GLOBALS['contexte'], |
|
| 132 | - $GLOBALS['use_cache'], |
|
| 133 | - $chemin_cache, |
|
| 134 | - null, |
|
| 135 | - $page, |
|
| 136 | - $lastmodified, |
|
| 137 | - $connect |
|
| 138 | - ); |
|
| 139 | - if ($page === '') { |
|
| 140 | - $erreur = _T( |
|
| 141 | - 'info_erreur_squelette2', |
|
| 142 | - ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES] |
|
| 143 | - ); |
|
| 144 | - erreur_squelette($erreur); |
|
| 145 | - // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 |
|
| 146 | - $page = ['texte' => '', 'erreur' => $erreur]; |
|
| 147 | - } |
|
| 148 | - } |
|
| 149 | - |
|
| 150 | - if ($page and $chemin_cache) { |
|
| 151 | - $page['cache'] = $chemin_cache; |
|
| 152 | - } |
|
| 153 | - |
|
| 154 | - auto_content_type($page); |
|
| 155 | - |
|
| 156 | - $GLOBALS['flag_preserver'] |= headers_sent(); |
|
| 157 | - |
|
| 158 | - // Definir les entetes si ce n'est fait |
|
| 159 | - if (!$GLOBALS['flag_preserver']) { |
|
| 160 | - // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions |
|
| 161 | - if ( |
|
| 162 | - trim($page['texte']) === '' |
|
| 163 | - and _VAR_MODE !== 'debug' |
|
| 164 | - and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur |
|
| 165 | - ) { |
|
| 166 | - $GLOBALS['contexte']['fond_erreur'] = $fond; |
|
| 167 | - $page = message_page_indisponible($page, $GLOBALS['contexte']); |
|
| 168 | - } |
|
| 169 | - // pas de cache client en mode 'observation' |
|
| 170 | - if (defined('_VAR_MODE') and _VAR_MODE) { |
|
| 171 | - $page['entetes']['Cache-Control'] = 'no-cache,must-revalidate'; |
|
| 172 | - $page['entetes']['Pragma'] = 'no-cache'; |
|
| 173 | - } |
|
| 174 | - } |
|
| 175 | - } |
|
| 176 | - |
|
| 177 | - // Entete Last-Modified: |
|
| 178 | - // eviter d'etre incoherent en envoyant un lastmodified identique |
|
| 179 | - // a celui qu'on a refuse d'honorer plus haut (cf. #655) |
|
| 180 | - if ( |
|
| 181 | - $lastmodified |
|
| 182 | - and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 183 | - and !isset($page['entetes']['Last-Modified']) |
|
| 184 | - ) { |
|
| 185 | - $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT'; |
|
| 186 | - } |
|
| 187 | - |
|
| 188 | - // fermer la connexion apres les headers si requete HEAD |
|
| 189 | - if ($headers_only) { |
|
| 190 | - $page['entetes']['Connection'] = 'close'; |
|
| 191 | - } |
|
| 192 | - |
|
| 193 | - return $page; |
|
| 32 | + $chemin_cache = null; |
|
| 33 | + $lastmodified = null; |
|
| 34 | + $res = null; |
|
| 35 | + // flag_preserver est modifie ici, et utilise en globale |
|
| 36 | + // use_cache sert a informer le bouton d'admin pr savoir s'il met un * |
|
| 37 | + // contexte est utilise en globale dans le formulaire d'admin |
|
| 38 | + |
|
| 39 | + $GLOBALS['contexte'] = calculer_contexte(); |
|
| 40 | + $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 41 | + $page['contexte_implicite']['cache'] = $fond . preg_replace( |
|
| 42 | + ',\.[a-zA-Z0-9]*$,', |
|
| 43 | + '', |
|
| 44 | + preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']) |
|
| 45 | + ); |
|
| 46 | + // Cette fonction est utilisee deux fois |
|
| 47 | + $cacher = charger_fonction('cacher', 'public', true); |
|
| 48 | + // Les quatre derniers parametres sont modifies par la fonction: |
|
| 49 | + // emplacement, validite, et, s'il est valide, contenu & age |
|
| 50 | + if ($cacher) { |
|
| 51 | + $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified); |
|
| 52 | + } else { |
|
| 53 | + $GLOBALS['use_cache'] = -1; |
|
| 54 | + } |
|
| 55 | + // Si un resultat est retourne, c'est un message d'impossibilite |
|
| 56 | + if ($res) { |
|
| 57 | + return ['texte' => $res]; |
|
| 58 | + } |
|
| 59 | + |
|
| 60 | + if (!$chemin_cache || !$lastmodified) { |
|
| 61 | + $lastmodified = time(); |
|
| 62 | + } |
|
| 63 | + |
|
| 64 | + $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); |
|
| 65 | + $calculer_page = true; |
|
| 66 | + |
|
| 67 | + // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) |
|
| 68 | + // une perennite valide a meme reponse qu'une requete HEAD (par defaut les |
|
| 69 | + // pages sont dynamiques) |
|
| 70 | + if ( |
|
| 71 | + isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 72 | + and (!defined('_VAR_MODE') or !_VAR_MODE) |
|
| 73 | + and $chemin_cache |
|
| 74 | + and isset($page['entetes']) |
|
| 75 | + and isset($page['entetes']['Cache-Control']) |
|
| 76 | + and strstr($page['entetes']['Cache-Control'], 'max-age=') |
|
| 77 | + and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/') |
|
| 78 | + ) { |
|
| 79 | + $since = preg_replace( |
|
| 80 | + '/;.*/', |
|
| 81 | + '', |
|
| 82 | + $_SERVER['HTTP_IF_MODIFIED_SINCE'] |
|
| 83 | + ); |
|
| 84 | + $since = str_replace('GMT', '', $since); |
|
| 85 | + if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) { |
|
| 86 | + $page['status'] = 304; |
|
| 87 | + $headers_only = true; |
|
| 88 | + $calculer_page = false; |
|
| 89 | + } |
|
| 90 | + } |
|
| 91 | + |
|
| 92 | + // Si requete HEAD ou Last-modified compatible, ignorer le texte |
|
| 93 | + // et pas de content-type (pour contrer le bouton admin de inc-public) |
|
| 94 | + if (!$calculer_page) { |
|
| 95 | + $page['texte'] = ''; |
|
| 96 | + } else { |
|
| 97 | + // si la page est prise dans le cache |
|
| 98 | + if (!$GLOBALS['use_cache']) { |
|
| 99 | + // Informer les boutons d'admin du contexte |
|
| 100 | + // (fourni par urls_decoder_url ci-dessous lors de la mise en cache) |
|
| 101 | + $GLOBALS['contexte'] = $page['contexte']; |
|
| 102 | + |
|
| 103 | + // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 104 | + // d'inversion url => objet |
|
| 105 | + // plus necessaire si on utilise bien la fonction urls_decoder_url |
|
| 106 | + #unset($_SERVER['REDIRECT_url_propre']); |
|
| 107 | + #unset($_ENV['url_propre']); |
|
| 108 | + } else { |
|
| 109 | + // Compat ascendante : |
|
| 110 | + // 1. $contexte est global |
|
| 111 | + // (a evacuer car urls_decoder_url gere ce probleme ?) |
|
| 112 | + // et calculer la page |
|
| 113 | + if (!test_espace_prive()) { |
|
| 114 | + include_spip('inc/urls'); |
|
| 115 | + [$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url( |
|
| 116 | + nettoyer_uri(), |
|
| 117 | + $fond, |
|
| 118 | + $GLOBALS['contexte'], |
|
| 119 | + true |
|
| 120 | + ); |
|
| 121 | + } |
|
| 122 | + // squelette par defaut |
|
| 123 | + if (!strlen($fond ?? '')) { |
|
| 124 | + $fond = 'sommaire'; |
|
| 125 | + } |
|
| 126 | + |
|
| 127 | + // produire la page : peut mettre a jour $lastmodified |
|
| 128 | + $produire_page = charger_fonction('produire_page', 'public'); |
|
| 129 | + $page = $produire_page( |
|
| 130 | + $fond, |
|
| 131 | + $GLOBALS['contexte'], |
|
| 132 | + $GLOBALS['use_cache'], |
|
| 133 | + $chemin_cache, |
|
| 134 | + null, |
|
| 135 | + $page, |
|
| 136 | + $lastmodified, |
|
| 137 | + $connect |
|
| 138 | + ); |
|
| 139 | + if ($page === '') { |
|
| 140 | + $erreur = _T( |
|
| 141 | + 'info_erreur_squelette2', |
|
| 142 | + ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES] |
|
| 143 | + ); |
|
| 144 | + erreur_squelette($erreur); |
|
| 145 | + // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 |
|
| 146 | + $page = ['texte' => '', 'erreur' => $erreur]; |
|
| 147 | + } |
|
| 148 | + } |
|
| 149 | + |
|
| 150 | + if ($page and $chemin_cache) { |
|
| 151 | + $page['cache'] = $chemin_cache; |
|
| 152 | + } |
|
| 153 | + |
|
| 154 | + auto_content_type($page); |
|
| 155 | + |
|
| 156 | + $GLOBALS['flag_preserver'] |= headers_sent(); |
|
| 157 | + |
|
| 158 | + // Definir les entetes si ce n'est fait |
|
| 159 | + if (!$GLOBALS['flag_preserver']) { |
|
| 160 | + // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions |
|
| 161 | + if ( |
|
| 162 | + trim($page['texte']) === '' |
|
| 163 | + and _VAR_MODE !== 'debug' |
|
| 164 | + and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur |
|
| 165 | + ) { |
|
| 166 | + $GLOBALS['contexte']['fond_erreur'] = $fond; |
|
| 167 | + $page = message_page_indisponible($page, $GLOBALS['contexte']); |
|
| 168 | + } |
|
| 169 | + // pas de cache client en mode 'observation' |
|
| 170 | + if (defined('_VAR_MODE') and _VAR_MODE) { |
|
| 171 | + $page['entetes']['Cache-Control'] = 'no-cache,must-revalidate'; |
|
| 172 | + $page['entetes']['Pragma'] = 'no-cache'; |
|
| 173 | + } |
|
| 174 | + } |
|
| 175 | + } |
|
| 176 | + |
|
| 177 | + // Entete Last-Modified: |
|
| 178 | + // eviter d'etre incoherent en envoyant un lastmodified identique |
|
| 179 | + // a celui qu'on a refuse d'honorer plus haut (cf. #655) |
|
| 180 | + if ( |
|
| 181 | + $lastmodified |
|
| 182 | + and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 183 | + and !isset($page['entetes']['Last-Modified']) |
|
| 184 | + ) { |
|
| 185 | + $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT'; |
|
| 186 | + } |
|
| 187 | + |
|
| 188 | + // fermer la connexion apres les headers si requete HEAD |
|
| 189 | + if ($headers_only) { |
|
| 190 | + $page['entetes']['Connection'] = 'close'; |
|
| 191 | + } |
|
| 192 | + |
|
| 193 | + return $page; |
|
| 194 | 194 | } |
| 195 | 195 | |
| 196 | 196 | /** |
@@ -207,19 +207,19 @@ discard block |
||
| 207 | 207 | */ |
| 208 | 208 | function calculer_contexte() { |
| 209 | 209 | |
| 210 | - $contexte = []; |
|
| 211 | - foreach ($_GET as $var => $val) { |
|
| 212 | - if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 213 | - $contexte[$var] = $val; |
|
| 214 | - } |
|
| 215 | - } |
|
| 216 | - foreach ($_POST as $var => $val) { |
|
| 217 | - if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 218 | - $contexte[$var] = $val; |
|
| 219 | - } |
|
| 220 | - } |
|
| 221 | - |
|
| 222 | - return $contexte; |
|
| 210 | + $contexte = []; |
|
| 211 | + foreach ($_GET as $var => $val) { |
|
| 212 | + if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 213 | + $contexte[$var] = $val; |
|
| 214 | + } |
|
| 215 | + } |
|
| 216 | + foreach ($_POST as $var => $val) { |
|
| 217 | + if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 218 | + $contexte[$var] = $val; |
|
| 219 | + } |
|
| 220 | + } |
|
| 221 | + |
|
| 222 | + return $contexte; |
|
| 223 | 223 | } |
| 224 | 224 | |
| 225 | 225 | /** |
@@ -230,25 +230,25 @@ discard block |
||
| 230 | 230 | * @return array |
| 231 | 231 | */ |
| 232 | 232 | function calculer_contexte_implicite() { |
| 233 | - static $notes = null; |
|
| 234 | - if (is_null($notes)) { |
|
| 235 | - $notes = charger_fonction('notes', 'inc', true); |
|
| 236 | - } |
|
| 237 | - $contexte_implicite = [ |
|
| 238 | - 'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ? |
|
| 239 | - 'host' => ($_SERVER['HTTP_HOST'] ?? null), |
|
| 240 | - 'https' => ($_SERVER['HTTPS'] ?? ''), |
|
| 241 | - 'espace' => test_espace_prive(), |
|
| 242 | - 'marqueur' => ($GLOBALS['marqueur'] ?? ''), |
|
| 243 | - 'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''), |
|
| 244 | - 'notes' => $notes ? $notes('', 'contexter_cache') : '', |
|
| 245 | - 'spip_version_code' => $GLOBALS['spip_version_code'], |
|
| 246 | - ]; |
|
| 247 | - if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
|
| 248 | - $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 249 | - } |
|
| 250 | - |
|
| 251 | - return $contexte_implicite; |
|
| 233 | + static $notes = null; |
|
| 234 | + if (is_null($notes)) { |
|
| 235 | + $notes = charger_fonction('notes', 'inc', true); |
|
| 236 | + } |
|
| 237 | + $contexte_implicite = [ |
|
| 238 | + 'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ? |
|
| 239 | + 'host' => ($_SERVER['HTTP_HOST'] ?? null), |
|
| 240 | + 'https' => ($_SERVER['HTTPS'] ?? ''), |
|
| 241 | + 'espace' => test_espace_prive(), |
|
| 242 | + 'marqueur' => ($GLOBALS['marqueur'] ?? ''), |
|
| 243 | + 'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''), |
|
| 244 | + 'notes' => $notes ? $notes('', 'contexter_cache') : '', |
|
| 245 | + 'spip_version_code' => $GLOBALS['spip_version_code'], |
|
| 246 | + ]; |
|
| 247 | + if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
|
| 248 | + $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 249 | + } |
|
| 250 | + |
|
| 251 | + return $contexte_implicite; |
|
| 252 | 252 | } |
| 253 | 253 | |
| 254 | 254 | // |
@@ -257,55 +257,55 @@ discard block |
||
| 257 | 257 | |
| 258 | 258 | function auto_content_type($page) { |
| 259 | 259 | |
| 260 | - if (!isset($GLOBALS['flag_preserver'])) { |
|
| 261 | - $GLOBALS['flag_preserver'] = ($page && preg_match( |
|
| 262 | - '/header\s*\(\s*.content\-type:/isx', |
|
| 263 | - $page['texte'] |
|
| 264 | - ) || (isset($page['entetes']['Content-Type']))); |
|
| 265 | - } |
|
| 260 | + if (!isset($GLOBALS['flag_preserver'])) { |
|
| 261 | + $GLOBALS['flag_preserver'] = ($page && preg_match( |
|
| 262 | + '/header\s*\(\s*.content\-type:/isx', |
|
| 263 | + $page['texte'] |
|
| 264 | + ) || (isset($page['entetes']['Content-Type']))); |
|
| 265 | + } |
|
| 266 | 266 | } |
| 267 | 267 | |
| 268 | 268 | function inclure_page($fond, $contexte, string $connect = '') { |
| 269 | - $use_cache = null; |
|
| 270 | - $chemin_cache = null; |
|
| 271 | - $lastinclude = null; |
|
| 272 | - $res = null; |
|
| 273 | - static $cacher, $produire_page; |
|
| 274 | - |
|
| 275 | - // enlever le fond de contexte inclus car sinon il prend la main |
|
| 276 | - // dans les sous inclusions -> boucle infinie d'inclusion identique |
|
| 277 | - // (cette precaution n'est probablement plus utile) |
|
| 278 | - unset($contexte['fond']); |
|
| 279 | - $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 280 | - $page['contexte_implicite']['cache'] = $fond; |
|
| 281 | - if (is_null($cacher)) { |
|
| 282 | - $cacher = charger_fonction('cacher', 'public', true); |
|
| 283 | - } |
|
| 284 | - // Les quatre derniers parametres sont modifies par la fonction: |
|
| 285 | - // emplacement, validite, et, s'il est valide, contenu & age |
|
| 286 | - if ($cacher) { |
|
| 287 | - $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 288 | - } else { |
|
| 289 | - $use_cache = -1; |
|
| 290 | - } |
|
| 291 | - // $res = message d'erreur : on sort de la |
|
| 292 | - if ($res) { |
|
| 293 | - return ['texte' => $res]; |
|
| 294 | - } |
|
| 295 | - |
|
| 296 | - // Si use_cache ne vaut pas 0, la page doit etre calculee |
|
| 297 | - // produire la page : peut mettre a jour $lastinclude |
|
| 298 | - // le contexte_cache envoye a cacher() a ete conserve et est passe a produire |
|
| 299 | - if ($use_cache) { |
|
| 300 | - if (is_null($produire_page)) { |
|
| 301 | - $produire_page = charger_fonction('produire_page', 'public'); |
|
| 302 | - } |
|
| 303 | - $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect); |
|
| 304 | - } |
|
| 305 | - // dans tous les cas, mettre a jour $GLOBALS['lastmodified'] |
|
| 306 | - $GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude); |
|
| 307 | - |
|
| 308 | - return $page; |
|
| 269 | + $use_cache = null; |
|
| 270 | + $chemin_cache = null; |
|
| 271 | + $lastinclude = null; |
|
| 272 | + $res = null; |
|
| 273 | + static $cacher, $produire_page; |
|
| 274 | + |
|
| 275 | + // enlever le fond de contexte inclus car sinon il prend la main |
|
| 276 | + // dans les sous inclusions -> boucle infinie d'inclusion identique |
|
| 277 | + // (cette precaution n'est probablement plus utile) |
|
| 278 | + unset($contexte['fond']); |
|
| 279 | + $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 280 | + $page['contexte_implicite']['cache'] = $fond; |
|
| 281 | + if (is_null($cacher)) { |
|
| 282 | + $cacher = charger_fonction('cacher', 'public', true); |
|
| 283 | + } |
|
| 284 | + // Les quatre derniers parametres sont modifies par la fonction: |
|
| 285 | + // emplacement, validite, et, s'il est valide, contenu & age |
|
| 286 | + if ($cacher) { |
|
| 287 | + $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 288 | + } else { |
|
| 289 | + $use_cache = -1; |
|
| 290 | + } |
|
| 291 | + // $res = message d'erreur : on sort de la |
|
| 292 | + if ($res) { |
|
| 293 | + return ['texte' => $res]; |
|
| 294 | + } |
|
| 295 | + |
|
| 296 | + // Si use_cache ne vaut pas 0, la page doit etre calculee |
|
| 297 | + // produire la page : peut mettre a jour $lastinclude |
|
| 298 | + // le contexte_cache envoye a cacher() a ete conserve et est passe a produire |
|
| 299 | + if ($use_cache) { |
|
| 300 | + if (is_null($produire_page)) { |
|
| 301 | + $produire_page = charger_fonction('produire_page', 'public'); |
|
| 302 | + } |
|
| 303 | + $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect); |
|
| 304 | + } |
|
| 305 | + // dans tous les cas, mettre a jour $GLOBALS['lastmodified'] |
|
| 306 | + $GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude); |
|
| 307 | + |
|
| 308 | + return $page; |
|
| 309 | 309 | } |
| 310 | 310 | |
| 311 | 311 | /** |
@@ -323,41 +323,41 @@ discard block |
||
| 323 | 323 | * @return array |
| 324 | 324 | */ |
| 325 | 325 | function public_produire_page_dist( |
| 326 | - $fond, |
|
| 327 | - $contexte, |
|
| 328 | - $use_cache, |
|
| 329 | - $chemin_cache, |
|
| 330 | - $contexte_cache, |
|
| 331 | - &$page, |
|
| 332 | - &$lastinclude, |
|
| 333 | - $connect = '' |
|
| 326 | + $fond, |
|
| 327 | + $contexte, |
|
| 328 | + $use_cache, |
|
| 329 | + $chemin_cache, |
|
| 330 | + $contexte_cache, |
|
| 331 | + &$page, |
|
| 332 | + &$lastinclude, |
|
| 333 | + $connect = '' |
|
| 334 | 334 | ) { |
| 335 | - static $parametrer, $cacher; |
|
| 336 | - if (!$parametrer) { |
|
| 337 | - $parametrer = charger_fonction('parametrer', 'public'); |
|
| 338 | - } |
|
| 339 | - $page = $parametrer($fond, $contexte, $chemin_cache, $connect); |
|
| 340 | - // et on l'enregistre sur le disque |
|
| 341 | - if ( |
|
| 342 | - $chemin_cache |
|
| 343 | - and $use_cache > -1 |
|
| 344 | - and is_array($page) |
|
| 345 | - and count($page) |
|
| 346 | - and isset($page['entetes']['X-Spip-Cache']) |
|
| 347 | - and $page['entetes']['X-Spip-Cache'] > 0 |
|
| 348 | - ) { |
|
| 349 | - if (is_null($cacher)) { |
|
| 350 | - $cacher = charger_fonction('cacher', 'public', true); |
|
| 351 | - } |
|
| 352 | - $lastinclude = time(); |
|
| 353 | - if ($cacher) { |
|
| 354 | - $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 355 | - } else { |
|
| 356 | - $use_cache = -1; |
|
| 357 | - } |
|
| 358 | - } |
|
| 359 | - |
|
| 360 | - return $page; |
|
| 335 | + static $parametrer, $cacher; |
|
| 336 | + if (!$parametrer) { |
|
| 337 | + $parametrer = charger_fonction('parametrer', 'public'); |
|
| 338 | + } |
|
| 339 | + $page = $parametrer($fond, $contexte, $chemin_cache, $connect); |
|
| 340 | + // et on l'enregistre sur le disque |
|
| 341 | + if ( |
|
| 342 | + $chemin_cache |
|
| 343 | + and $use_cache > -1 |
|
| 344 | + and is_array($page) |
|
| 345 | + and count($page) |
|
| 346 | + and isset($page['entetes']['X-Spip-Cache']) |
|
| 347 | + and $page['entetes']['X-Spip-Cache'] > 0 |
|
| 348 | + ) { |
|
| 349 | + if (is_null($cacher)) { |
|
| 350 | + $cacher = charger_fonction('cacher', 'public', true); |
|
| 351 | + } |
|
| 352 | + $lastinclude = time(); |
|
| 353 | + if ($cacher) { |
|
| 354 | + $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 355 | + } else { |
|
| 356 | + $use_cache = -1; |
|
| 357 | + } |
|
| 358 | + } |
|
| 359 | + |
|
| 360 | + return $page; |
|
| 361 | 361 | } |
| 362 | 362 | |
| 363 | 363 | // Fonction inseree par le compilateur dans le code compile. |
@@ -371,14 +371,14 @@ discard block |
||
| 371 | 371 | // 4: langue |
| 372 | 372 | |
| 373 | 373 | function inserer_balise_dynamique($contexte_exec, $contexte_compil) { |
| 374 | - arguments_balise_dyn_depuis_modele(null, 'reset'); |
|
| 375 | - |
|
| 376 | - if (!is_array($contexte_exec)) { |
|
| 377 | - echo $contexte_exec; |
|
| 378 | - } // message d'erreur etc |
|
| 379 | - else { |
|
| 380 | - inclure_balise_dynamique($contexte_exec, true, $contexte_compil); |
|
| 381 | - } |
|
| 374 | + arguments_balise_dyn_depuis_modele(null, 'reset'); |
|
| 375 | + |
|
| 376 | + if (!is_array($contexte_exec)) { |
|
| 377 | + echo $contexte_exec; |
|
| 378 | + } // message d'erreur etc |
|
| 379 | + else { |
|
| 380 | + inclure_balise_dynamique($contexte_exec, true, $contexte_compil); |
|
| 381 | + } |
|
| 382 | 382 | } |
| 383 | 383 | |
| 384 | 384 | /** |
@@ -391,101 +391,101 @@ discard block |
||
| 391 | 391 | * @return string|void |
| 392 | 392 | */ |
| 393 | 393 | function inclure_balise_dynamique($texte, $echo = true, $contexte_compil = []) { |
| 394 | - if (is_array($texte)) { |
|
| 395 | - [$fond, $delainc, $contexte_inclus] = $texte; |
|
| 396 | - |
|
| 397 | - // delais a l'ancienne, c'est pratiquement mort |
|
| 398 | - $d = $GLOBALS['delais'] ?? null; |
|
| 399 | - $GLOBALS['delais'] = $delainc; |
|
| 400 | - |
|
| 401 | - $page = recuperer_fond( |
|
| 402 | - $fond, |
|
| 403 | - $contexte_inclus, |
|
| 404 | - ['trim' => false, 'raw' => true, 'compil' => $contexte_compil] |
|
| 405 | - ); |
|
| 406 | - |
|
| 407 | - $texte = $page['texte']; |
|
| 408 | - |
|
| 409 | - $GLOBALS['delais'] = $d; |
|
| 410 | - // Faire remonter les entetes |
|
| 411 | - if ( |
|
| 412 | - isset($page['entetes']) |
|
| 413 | - and is_array($page['entetes']) |
|
| 414 | - ) { |
|
| 415 | - // mais pas toutes |
|
| 416 | - unset($page['entetes']['X-Spip-Cache']); |
|
| 417 | - unset($page['entetes']['Content-Type']); |
|
| 418 | - if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) { |
|
| 419 | - if (!is_array($GLOBALS['page']['entetes'])) { |
|
| 420 | - $GLOBALS['page']['entetes'] = []; |
|
| 421 | - } |
|
| 422 | - $GLOBALS['page']['entetes'] = |
|
| 423 | - array_merge($GLOBALS['page']['entetes'], $page['entetes']); |
|
| 424 | - } |
|
| 425 | - } |
|
| 426 | - // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines |
|
| 427 | - if ( |
|
| 428 | - isset($page['contexte']['_pipelines']) |
|
| 429 | - and is_array($page['contexte']['_pipelines']) |
|
| 430 | - and count($page['contexte']['_pipelines']) |
|
| 431 | - ) { |
|
| 432 | - foreach ($page['contexte']['_pipelines'] as $pipe => $args) { |
|
| 433 | - $args['contexte'] = $page['contexte']; |
|
| 434 | - unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul |
|
| 435 | - $texte = pipeline( |
|
| 436 | - $pipe, |
|
| 437 | - [ |
|
| 438 | - 'data' => $texte, |
|
| 439 | - 'args' => $args |
|
| 440 | - ] |
|
| 441 | - ); |
|
| 442 | - } |
|
| 443 | - } |
|
| 444 | - } |
|
| 445 | - |
|
| 446 | - if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 447 | - // compatibilite : avant on donnait le numero de ligne ou rien. |
|
| 448 | - $ligne = intval($contexte_compil[3] ?? $contexte_compil); |
|
| 449 | - $GLOBALS['debug_objets']['resultat'][$ligne] = $texte; |
|
| 450 | - } |
|
| 451 | - if ($echo) { |
|
| 452 | - echo $texte; |
|
| 453 | - } else { |
|
| 454 | - return $texte; |
|
| 455 | - } |
|
| 394 | + if (is_array($texte)) { |
|
| 395 | + [$fond, $delainc, $contexte_inclus] = $texte; |
|
| 396 | + |
|
| 397 | + // delais a l'ancienne, c'est pratiquement mort |
|
| 398 | + $d = $GLOBALS['delais'] ?? null; |
|
| 399 | + $GLOBALS['delais'] = $delainc; |
|
| 400 | + |
|
| 401 | + $page = recuperer_fond( |
|
| 402 | + $fond, |
|
| 403 | + $contexte_inclus, |
|
| 404 | + ['trim' => false, 'raw' => true, 'compil' => $contexte_compil] |
|
| 405 | + ); |
|
| 406 | + |
|
| 407 | + $texte = $page['texte']; |
|
| 408 | + |
|
| 409 | + $GLOBALS['delais'] = $d; |
|
| 410 | + // Faire remonter les entetes |
|
| 411 | + if ( |
|
| 412 | + isset($page['entetes']) |
|
| 413 | + and is_array($page['entetes']) |
|
| 414 | + ) { |
|
| 415 | + // mais pas toutes |
|
| 416 | + unset($page['entetes']['X-Spip-Cache']); |
|
| 417 | + unset($page['entetes']['Content-Type']); |
|
| 418 | + if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) { |
|
| 419 | + if (!is_array($GLOBALS['page']['entetes'])) { |
|
| 420 | + $GLOBALS['page']['entetes'] = []; |
|
| 421 | + } |
|
| 422 | + $GLOBALS['page']['entetes'] = |
|
| 423 | + array_merge($GLOBALS['page']['entetes'], $page['entetes']); |
|
| 424 | + } |
|
| 425 | + } |
|
| 426 | + // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines |
|
| 427 | + if ( |
|
| 428 | + isset($page['contexte']['_pipelines']) |
|
| 429 | + and is_array($page['contexte']['_pipelines']) |
|
| 430 | + and count($page['contexte']['_pipelines']) |
|
| 431 | + ) { |
|
| 432 | + foreach ($page['contexte']['_pipelines'] as $pipe => $args) { |
|
| 433 | + $args['contexte'] = $page['contexte']; |
|
| 434 | + unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul |
|
| 435 | + $texte = pipeline( |
|
| 436 | + $pipe, |
|
| 437 | + [ |
|
| 438 | + 'data' => $texte, |
|
| 439 | + 'args' => $args |
|
| 440 | + ] |
|
| 441 | + ); |
|
| 442 | + } |
|
| 443 | + } |
|
| 444 | + } |
|
| 445 | + |
|
| 446 | + if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 447 | + // compatibilite : avant on donnait le numero de ligne ou rien. |
|
| 448 | + $ligne = intval($contexte_compil[3] ?? $contexte_compil); |
|
| 449 | + $GLOBALS['debug_objets']['resultat'][$ligne] = $texte; |
|
| 450 | + } |
|
| 451 | + if ($echo) { |
|
| 452 | + echo $texte; |
|
| 453 | + } else { |
|
| 454 | + return $texte; |
|
| 455 | + } |
|
| 456 | 456 | } |
| 457 | 457 | |
| 458 | 458 | function message_page_indisponible($page, $contexte) { |
| 459 | - static $deja = false; |
|
| 460 | - if ($deja) { |
|
| 461 | - return 'erreur'; |
|
| 462 | - } |
|
| 463 | - $codes = [ |
|
| 464 | - '404' => '404 Not Found', |
|
| 465 | - '503' => '503 Service Unavailable', |
|
| 466 | - ]; |
|
| 467 | - |
|
| 468 | - $contexte['status'] = ($page !== false) ? '404' : '503'; |
|
| 469 | - $contexte['code'] = $codes[$contexte['status']]; |
|
| 470 | - $contexte['fond'] = '404'; // gere les 2 erreurs |
|
| 471 | - if (!isset($contexte['lang'])) { |
|
| 472 | - include_spip('inc/lang'); |
|
| 473 | - $contexte['lang'] = $GLOBALS['spip_lang']; |
|
| 474 | - } |
|
| 475 | - |
|
| 476 | - $deja = true; |
|
| 477 | - // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent |
|
| 478 | - // ex restriction d'acces => 401 |
|
| 479 | - $contexte = pipeline('page_indisponible', $contexte); |
|
| 480 | - |
|
| 481 | - // produire la page d'erreur |
|
| 482 | - $page = inclure_page($contexte['fond'], $contexte); |
|
| 483 | - if (!$page) { |
|
| 484 | - $page = inclure_page('404', $contexte); |
|
| 485 | - } |
|
| 486 | - $page['status'] = $contexte['status']; |
|
| 487 | - |
|
| 488 | - return $page; |
|
| 459 | + static $deja = false; |
|
| 460 | + if ($deja) { |
|
| 461 | + return 'erreur'; |
|
| 462 | + } |
|
| 463 | + $codes = [ |
|
| 464 | + '404' => '404 Not Found', |
|
| 465 | + '503' => '503 Service Unavailable', |
|
| 466 | + ]; |
|
| 467 | + |
|
| 468 | + $contexte['status'] = ($page !== false) ? '404' : '503'; |
|
| 469 | + $contexte['code'] = $codes[$contexte['status']]; |
|
| 470 | + $contexte['fond'] = '404'; // gere les 2 erreurs |
|
| 471 | + if (!isset($contexte['lang'])) { |
|
| 472 | + include_spip('inc/lang'); |
|
| 473 | + $contexte['lang'] = $GLOBALS['spip_lang']; |
|
| 474 | + } |
|
| 475 | + |
|
| 476 | + $deja = true; |
|
| 477 | + // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent |
|
| 478 | + // ex restriction d'acces => 401 |
|
| 479 | + $contexte = pipeline('page_indisponible', $contexte); |
|
| 480 | + |
|
| 481 | + // produire la page d'erreur |
|
| 482 | + $page = inclure_page($contexte['fond'], $contexte); |
|
| 483 | + if (!$page) { |
|
| 484 | + $page = inclure_page('404', $contexte); |
|
| 485 | + } |
|
| 486 | + $page['status'] = $contexte['status']; |
|
| 487 | + |
|
| 488 | + return $page; |
|
| 489 | 489 | } |
| 490 | 490 | |
| 491 | 491 | /** |
@@ -497,44 +497,44 @@ discard block |
||
| 497 | 497 | * @return mixed |
| 498 | 498 | */ |
| 499 | 499 | function arguments_balise_dyn_depuis_modele($arg, $operation = 'set') { |
| 500 | - static $balise_dyn_appellee_par_modele = null; |
|
| 501 | - switch ($operation) { |
|
| 502 | - case 'read': |
|
| 503 | - return $balise_dyn_appellee_par_modele; |
|
| 504 | - case 'reset': |
|
| 505 | - $balise_dyn_appellee_par_modele = null; |
|
| 506 | - return null; |
|
| 507 | - case 'set': |
|
| 508 | - default: |
|
| 509 | - $balise_dyn_appellee_par_modele = $arg; |
|
| 510 | - return $arg; |
|
| 511 | - } |
|
| 500 | + static $balise_dyn_appellee_par_modele = null; |
|
| 501 | + switch ($operation) { |
|
| 502 | + case 'read': |
|
| 503 | + return $balise_dyn_appellee_par_modele; |
|
| 504 | + case 'reset': |
|
| 505 | + $balise_dyn_appellee_par_modele = null; |
|
| 506 | + return null; |
|
| 507 | + case 'set': |
|
| 508 | + default: |
|
| 509 | + $balise_dyn_appellee_par_modele = $arg; |
|
| 510 | + return $arg; |
|
| 511 | + } |
|
| 512 | 512 | } |
| 513 | 513 | |
| 514 | 514 | // temporairement ici : a mettre dans le futur inc/modeles |
| 515 | 515 | // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array() |
| 516 | 516 | function creer_contexte_de_modele($args) { |
| 517 | - $contexte = []; |
|
| 518 | - foreach ($args as $var => $val) { |
|
| 519 | - if (is_int($var)) { // argument pas formate |
|
| 520 | - if (in_array($val, ['left', 'right', 'center'])) { |
|
| 521 | - $var = 'align'; |
|
| 522 | - $contexte[$var] = $val; |
|
| 523 | - } else { |
|
| 524 | - $args = explode('=', $val); |
|
| 525 | - if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args |
|
| 526 | - $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1); |
|
| 527 | - } else // notation abregee |
|
| 528 | - { |
|
| 529 | - $contexte[trim($val)] = trim($val); |
|
| 530 | - } |
|
| 531 | - } |
|
| 532 | - } else { |
|
| 533 | - $contexte[$var] = $val; |
|
| 534 | - } |
|
| 535 | - } |
|
| 536 | - |
|
| 537 | - return $contexte; |
|
| 517 | + $contexte = []; |
|
| 518 | + foreach ($args as $var => $val) { |
|
| 519 | + if (is_int($var)) { // argument pas formate |
|
| 520 | + if (in_array($val, ['left', 'right', 'center'])) { |
|
| 521 | + $var = 'align'; |
|
| 522 | + $contexte[$var] = $val; |
|
| 523 | + } else { |
|
| 524 | + $args = explode('=', $val); |
|
| 525 | + if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args |
|
| 526 | + $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1); |
|
| 527 | + } else // notation abregee |
|
| 528 | + { |
|
| 529 | + $contexte[trim($val)] = trim($val); |
|
| 530 | + } |
|
| 531 | + } |
|
| 532 | + } else { |
|
| 533 | + $contexte[$var] = $val; |
|
| 534 | + } |
|
| 535 | + } |
|
| 536 | + |
|
| 537 | + return $contexte; |
|
| 538 | 538 | } |
| 539 | 539 | |
| 540 | 540 | /** |
@@ -549,43 +549,43 @@ discard block |
||
| 549 | 549 | * @return string |
| 550 | 550 | */ |
| 551 | 551 | function styliser_modele($modele, $id, $contexte = null) { |
| 552 | - static $styliseurs = null; |
|
| 553 | - if (is_null($styliseurs)) { |
|
| 554 | - $tables_objet = lister_tables_objets_sql(); |
|
| 555 | - foreach ($tables_objet as $table => $desc) { |
|
| 556 | - if ( |
|
| 557 | - isset($desc['modeles']) and $desc['modeles'] |
|
| 558 | - and isset($desc['modeles_styliser']) and $desc['modeles_styliser'] |
|
| 559 | - and function_exists($desc['modeles_styliser']) |
|
| 560 | - ) { |
|
| 561 | - $primary = id_table_objet($table); |
|
| 562 | - foreach ($desc['modeles'] as $m) { |
|
| 563 | - $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']]; |
|
| 564 | - } |
|
| 565 | - } |
|
| 566 | - } |
|
| 567 | - } |
|
| 568 | - |
|
| 569 | - if (isset($styliseurs[$modele])) { |
|
| 570 | - $styliseur = $styliseurs[$modele]['callback']; |
|
| 571 | - $primary = $styliseurs[$modele]['primary']; |
|
| 572 | - if (is_null($id) and $contexte) { |
|
| 573 | - if (isset($contexte['id'])) { |
|
| 574 | - $id = $contexte['id']; |
|
| 575 | - } elseif (isset($contexte[$primary])) { |
|
| 576 | - $id = $contexte[$primary]; |
|
| 577 | - } |
|
| 578 | - } |
|
| 579 | - if (is_null($id)) { |
|
| 580 | - $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]); |
|
| 581 | - erreur_squelette($msg); |
|
| 582 | - // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant |
|
| 583 | - $id = 0; |
|
| 584 | - } |
|
| 585 | - $modele = $styliseur($modele, $id); |
|
| 586 | - } |
|
| 587 | - |
|
| 588 | - return $modele; |
|
| 552 | + static $styliseurs = null; |
|
| 553 | + if (is_null($styliseurs)) { |
|
| 554 | + $tables_objet = lister_tables_objets_sql(); |
|
| 555 | + foreach ($tables_objet as $table => $desc) { |
|
| 556 | + if ( |
|
| 557 | + isset($desc['modeles']) and $desc['modeles'] |
|
| 558 | + and isset($desc['modeles_styliser']) and $desc['modeles_styliser'] |
|
| 559 | + and function_exists($desc['modeles_styliser']) |
|
| 560 | + ) { |
|
| 561 | + $primary = id_table_objet($table); |
|
| 562 | + foreach ($desc['modeles'] as $m) { |
|
| 563 | + $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']]; |
|
| 564 | + } |
|
| 565 | + } |
|
| 566 | + } |
|
| 567 | + } |
|
| 568 | + |
|
| 569 | + if (isset($styliseurs[$modele])) { |
|
| 570 | + $styliseur = $styliseurs[$modele]['callback']; |
|
| 571 | + $primary = $styliseurs[$modele]['primary']; |
|
| 572 | + if (is_null($id) and $contexte) { |
|
| 573 | + if (isset($contexte['id'])) { |
|
| 574 | + $id = $contexte['id']; |
|
| 575 | + } elseif (isset($contexte[$primary])) { |
|
| 576 | + $id = $contexte[$primary]; |
|
| 577 | + } |
|
| 578 | + } |
|
| 579 | + if (is_null($id)) { |
|
| 580 | + $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]); |
|
| 581 | + erreur_squelette($msg); |
|
| 582 | + // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant |
|
| 583 | + $id = 0; |
|
| 584 | + } |
|
| 585 | + $modele = $styliseur($modele, $id); |
|
| 586 | + } |
|
| 587 | + |
|
| 588 | + return $modele; |
|
| 589 | 589 | } |
| 590 | 590 | |
| 591 | 591 | /** |
@@ -602,102 +602,102 @@ discard block |
||
| 602 | 602 | */ |
| 603 | 603 | function inclure_modele($type, $id, $params, $lien, string $connect = '', $env = []) { |
| 604 | 604 | |
| 605 | - static $compteur; |
|
| 606 | - if (++$compteur > 10) { |
|
| 607 | - return ''; |
|
| 608 | - } # ne pas boucler indefiniment |
|
| 609 | - |
|
| 610 | - $type = strtolower($type); |
|
| 611 | - $type = styliser_modele($type, $id); |
|
| 612 | - |
|
| 613 | - $fond = $class = ''; |
|
| 614 | - |
|
| 615 | - $params = array_filter(explode('|', $params)); |
|
| 616 | - if ($params) { |
|
| 617 | - $soustype = current($params); |
|
| 618 | - $soustype = strtolower(trim($soustype)); |
|
| 619 | - if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) { |
|
| 620 | - $soustype = next($params); |
|
| 621 | - $soustype = strtolower($soustype); |
|
| 622 | - } |
|
| 623 | - |
|
| 624 | - if (preg_match(',^[a-z0-9_]+$,', $soustype)) { |
|
| 625 | - if (!trouve_modele($fond = ($type . '_' . $soustype))) { |
|
| 626 | - $fond = ''; |
|
| 627 | - $class = $soustype; |
|
| 628 | - } |
|
| 629 | - // enlever le sous type des params |
|
| 630 | - $params = array_diff($params, [$soustype]); |
|
| 631 | - } |
|
| 632 | - } |
|
| 633 | - |
|
| 634 | - // Si ca marche pas en precisant le sous-type, prendre le type |
|
| 635 | - if (!$fond and !trouve_modele($fond = $type)) { |
|
| 636 | - spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE); |
|
| 637 | - |
|
| 638 | - return false; |
|
| 639 | - } |
|
| 640 | - $fond = 'modeles/' . $fond; |
|
| 641 | - // Creer le contexte |
|
| 642 | - $contexte = $env; |
|
| 643 | - $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte |
|
| 644 | - |
|
| 645 | - // Le numero du modele est mis dans l'environnement |
|
| 646 | - // d'une part sous l'identifiant "id" |
|
| 647 | - // et d'autre part sous l'identifiant de la cle primaire |
|
| 648 | - // par la fonction id_table_objet, |
|
| 649 | - // (<article1> =>> article =>> id_article =>> id_article=1) |
|
| 650 | - $_id = id_table_objet($type); |
|
| 651 | - $contexte['id'] = $contexte[$_id] = $id; |
|
| 652 | - |
|
| 653 | - if (isset($class)) { |
|
| 654 | - $contexte['class'] = $class; |
|
| 655 | - } |
|
| 656 | - |
|
| 657 | - // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url] |
|
| 658 | - if ($lien) { |
|
| 659 | - # un eventuel guillemet (") sera reechappe par #ENV |
|
| 660 | - $contexte['lien'] = str_replace('"', '"', $lien['href']); |
|
| 661 | - $contexte['lien_class'] = $lien['class']; |
|
| 662 | - $contexte['lien_mime'] = $lien['mime']; |
|
| 663 | - $contexte['lien_title'] = $lien['title']; |
|
| 664 | - $contexte['lien_hreflang'] = $lien['hreflang']; |
|
| 665 | - } |
|
| 666 | - |
|
| 667 | - // Traiter les parametres |
|
| 668 | - // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en> |
|
| 669 | - $arg_list = creer_contexte_de_modele($params); |
|
| 670 | - $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args |
|
| 671 | - $contexte = array_merge($contexte, $arg_list); |
|
| 672 | - |
|
| 673 | - // Appliquer le modele avec le contexte |
|
| 674 | - $retour = recuperer_fond($fond, $contexte, [], $connect); |
|
| 675 | - |
|
| 676 | - // Regarder si le modele tient compte des liens (il *doit* alors indiquer |
|
| 677 | - // spip_lien_ok dans les classes de son conteneur de premier niveau ; |
|
| 678 | - // sinon, s'il y a un lien, on l'ajoute classiquement |
|
| 679 | - if ( |
|
| 680 | - strstr( |
|
| 681 | - ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ', |
|
| 682 | - 'spip_lien_ok' |
|
| 683 | - ) |
|
| 684 | - ) { |
|
| 685 | - $retour = inserer_attribut( |
|
| 686 | - $retour, |
|
| 687 | - 'class', |
|
| 688 | - trim(str_replace(' spip_lien_ok ', ' ', " $classes ")) |
|
| 689 | - ); |
|
| 690 | - } else { |
|
| 691 | - if ($lien) { |
|
| 692 | - $retour = '<a href="' . $lien['href'] . '" class="' . $lien['class'] . '">' . $retour . '</a>'; |
|
| 693 | - } |
|
| 694 | - } |
|
| 695 | - |
|
| 696 | - $compteur--; |
|
| 697 | - |
|
| 698 | - return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax') |
|
| 699 | - ? encoder_contexte_ajax($contexte, '', $retour) |
|
| 700 | - : $retour; |
|
| 605 | + static $compteur; |
|
| 606 | + if (++$compteur > 10) { |
|
| 607 | + return ''; |
|
| 608 | + } # ne pas boucler indefiniment |
|
| 609 | + |
|
| 610 | + $type = strtolower($type); |
|
| 611 | + $type = styliser_modele($type, $id); |
|
| 612 | + |
|
| 613 | + $fond = $class = ''; |
|
| 614 | + |
|
| 615 | + $params = array_filter(explode('|', $params)); |
|
| 616 | + if ($params) { |
|
| 617 | + $soustype = current($params); |
|
| 618 | + $soustype = strtolower(trim($soustype)); |
|
| 619 | + if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) { |
|
| 620 | + $soustype = next($params); |
|
| 621 | + $soustype = strtolower($soustype); |
|
| 622 | + } |
|
| 623 | + |
|
| 624 | + if (preg_match(',^[a-z0-9_]+$,', $soustype)) { |
|
| 625 | + if (!trouve_modele($fond = ($type . '_' . $soustype))) { |
|
| 626 | + $fond = ''; |
|
| 627 | + $class = $soustype; |
|
| 628 | + } |
|
| 629 | + // enlever le sous type des params |
|
| 630 | + $params = array_diff($params, [$soustype]); |
|
| 631 | + } |
|
| 632 | + } |
|
| 633 | + |
|
| 634 | + // Si ca marche pas en precisant le sous-type, prendre le type |
|
| 635 | + if (!$fond and !trouve_modele($fond = $type)) { |
|
| 636 | + spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE); |
|
| 637 | + |
|
| 638 | + return false; |
|
| 639 | + } |
|
| 640 | + $fond = 'modeles/' . $fond; |
|
| 641 | + // Creer le contexte |
|
| 642 | + $contexte = $env; |
|
| 643 | + $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte |
|
| 644 | + |
|
| 645 | + // Le numero du modele est mis dans l'environnement |
|
| 646 | + // d'une part sous l'identifiant "id" |
|
| 647 | + // et d'autre part sous l'identifiant de la cle primaire |
|
| 648 | + // par la fonction id_table_objet, |
|
| 649 | + // (<article1> =>> article =>> id_article =>> id_article=1) |
|
| 650 | + $_id = id_table_objet($type); |
|
| 651 | + $contexte['id'] = $contexte[$_id] = $id; |
|
| 652 | + |
|
| 653 | + if (isset($class)) { |
|
| 654 | + $contexte['class'] = $class; |
|
| 655 | + } |
|
| 656 | + |
|
| 657 | + // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url] |
|
| 658 | + if ($lien) { |
|
| 659 | + # un eventuel guillemet (") sera reechappe par #ENV |
|
| 660 | + $contexte['lien'] = str_replace('"', '"', $lien['href']); |
|
| 661 | + $contexte['lien_class'] = $lien['class']; |
|
| 662 | + $contexte['lien_mime'] = $lien['mime']; |
|
| 663 | + $contexte['lien_title'] = $lien['title']; |
|
| 664 | + $contexte['lien_hreflang'] = $lien['hreflang']; |
|
| 665 | + } |
|
| 666 | + |
|
| 667 | + // Traiter les parametres |
|
| 668 | + // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en> |
|
| 669 | + $arg_list = creer_contexte_de_modele($params); |
|
| 670 | + $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args |
|
| 671 | + $contexte = array_merge($contexte, $arg_list); |
|
| 672 | + |
|
| 673 | + // Appliquer le modele avec le contexte |
|
| 674 | + $retour = recuperer_fond($fond, $contexte, [], $connect); |
|
| 675 | + |
|
| 676 | + // Regarder si le modele tient compte des liens (il *doit* alors indiquer |
|
| 677 | + // spip_lien_ok dans les classes de son conteneur de premier niveau ; |
|
| 678 | + // sinon, s'il y a un lien, on l'ajoute classiquement |
|
| 679 | + if ( |
|
| 680 | + strstr( |
|
| 681 | + ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ', |
|
| 682 | + 'spip_lien_ok' |
|
| 683 | + ) |
|
| 684 | + ) { |
|
| 685 | + $retour = inserer_attribut( |
|
| 686 | + $retour, |
|
| 687 | + 'class', |
|
| 688 | + trim(str_replace(' spip_lien_ok ', ' ', " $classes ")) |
|
| 689 | + ); |
|
| 690 | + } else { |
|
| 691 | + if ($lien) { |
|
| 692 | + $retour = '<a href="' . $lien['href'] . '" class="' . $lien['class'] . '">' . $retour . '</a>'; |
|
| 693 | + } |
|
| 694 | + } |
|
| 695 | + |
|
| 696 | + $compteur--; |
|
| 697 | + |
|
| 698 | + return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax') |
|
| 699 | + ? encoder_contexte_ajax($contexte, '', $retour) |
|
| 700 | + : $retour; |
|
| 701 | 701 | } |
| 702 | 702 | |
| 703 | 703 | // Un inclure_page qui marche aussi pour l'espace prive |
@@ -706,105 +706,105 @@ discard block |
||
| 706 | 706 | // recuperer_fond($fond,$contexte,array('raw'=>true)) |
| 707 | 707 | function evaluer_fond($fond, $contexte = [], string $connect = '') { |
| 708 | 708 | |
| 709 | - $page = inclure_page($fond, $contexte, $connect); |
|
| 710 | - |
|
| 711 | - if (!$page) { |
|
| 712 | - return $page; |
|
| 713 | - } |
|
| 714 | - // eval $page et affecte $res |
|
| 715 | - include _ROOT_RESTREINT . 'public/evaluer_page.php'; |
|
| 716 | - |
|
| 717 | - // Lever un drapeau (global) si le fond utilise #SESSION |
|
| 718 | - // a destination de public/parametrer |
|
| 719 | - // pour remonter vers les inclusions appelantes |
|
| 720 | - // il faut bien lever ce drapeau apres avoir evalue le fond |
|
| 721 | - // pour ne pas faire descendre le flag vers les inclusions appelees |
|
| 722 | - if ( |
|
| 723 | - isset($page['invalideurs']) |
|
| 724 | - and isset($page['invalideurs']['session']) |
|
| 725 | - ) { |
|
| 726 | - $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session']; |
|
| 727 | - } |
|
| 728 | - |
|
| 729 | - return $page; |
|
| 709 | + $page = inclure_page($fond, $contexte, $connect); |
|
| 710 | + |
|
| 711 | + if (!$page) { |
|
| 712 | + return $page; |
|
| 713 | + } |
|
| 714 | + // eval $page et affecte $res |
|
| 715 | + include _ROOT_RESTREINT . 'public/evaluer_page.php'; |
|
| 716 | + |
|
| 717 | + // Lever un drapeau (global) si le fond utilise #SESSION |
|
| 718 | + // a destination de public/parametrer |
|
| 719 | + // pour remonter vers les inclusions appelantes |
|
| 720 | + // il faut bien lever ce drapeau apres avoir evalue le fond |
|
| 721 | + // pour ne pas faire descendre le flag vers les inclusions appelees |
|
| 722 | + if ( |
|
| 723 | + isset($page['invalideurs']) |
|
| 724 | + and isset($page['invalideurs']['session']) |
|
| 725 | + ) { |
|
| 726 | + $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session']; |
|
| 727 | + } |
|
| 728 | + |
|
| 729 | + return $page; |
|
| 730 | 730 | } |
| 731 | 731 | |
| 732 | 732 | |
| 733 | 733 | function page_base_href(&$texte) { |
| 734 | - static $set_html_base = null; |
|
| 735 | - if (is_null($set_html_base)) { |
|
| 736 | - if (!defined('_SET_HTML_BASE')) { |
|
| 737 | - // si la profondeur est superieure a 1 |
|
| 738 | - // est que ce n'est pas une url page ni une url action |
|
| 739 | - // activer par defaut |
|
| 740 | - $set_html_base = (( |
|
| 741 | - $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2) |
|
| 742 | - and _request(_SPIP_PAGE) !== 'login' |
|
| 743 | - and !_request('action')) ? true : false); |
|
| 744 | - } else { |
|
| 745 | - $set_html_base = _SET_HTML_BASE; |
|
| 746 | - } |
|
| 747 | - } |
|
| 748 | - |
|
| 749 | - if ( |
|
| 750 | - $set_html_base |
|
| 751 | - and isset($GLOBALS['html']) and $GLOBALS['html'] |
|
| 752 | - and $GLOBALS['profondeur_url'] > 0 |
|
| 753 | - and ($poshead = strpos($texte, '</head>')) !== false |
|
| 754 | - ) { |
|
| 755 | - $head = substr($texte, 0, $poshead); |
|
| 756 | - $insert = false; |
|
| 757 | - $href_base = false; |
|
| 758 | - if (strpos($head, '<base') === false) { |
|
| 759 | - $insert = true; |
|
| 760 | - } else { |
|
| 761 | - // si aucun <base ...> n'a de href il faut en inserer un |
|
| 762 | - // sinon juste re-ecrire les ancres si besoin |
|
| 763 | - $insert = true; |
|
| 764 | - include_spip('inc/filtres'); |
|
| 765 | - $bases = extraire_balises($head, 'base'); |
|
| 766 | - foreach ($bases as $base) { |
|
| 767 | - if ($href_base = extraire_attribut($base, 'href')) { |
|
| 768 | - $insert = false; |
|
| 769 | - break; |
|
| 770 | - } |
|
| 771 | - } |
|
| 772 | - } |
|
| 773 | - |
|
| 774 | - if ($insert) { |
|
| 775 | - include_spip('inc/filtres_mini'); |
|
| 776 | - // ajouter un base qui reglera tous les liens relatifs |
|
| 777 | - $href_base = url_absolue('./'); |
|
| 778 | - $base = "\n<base href=\"$href_base\" />"; |
|
| 779 | - if (($pos = strpos($head, '<head>')) !== false) { |
|
| 780 | - $head = substr_replace($head, $base, $pos + 6, 0); |
|
| 781 | - } elseif (preg_match(',<head[^>]*>,i', $head, $r)) { |
|
| 782 | - $head = str_replace($r[0], $r[0] . $base, $head); |
|
| 783 | - } |
|
| 784 | - $texte = $head . substr($texte, $poshead); |
|
| 785 | - } |
|
| 786 | - if ($href_base) { |
|
| 787 | - // gerer les ancres |
|
| 788 | - $base = $_SERVER['REQUEST_URI']; |
|
| 789 | - // pas de guillemets ni < dans l'URL qu'on insere dans le HTML |
|
| 790 | - if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) { |
|
| 791 | - $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base); |
|
| 792 | - } |
|
| 793 | - if (strpos($texte, "href='#") !== false) { |
|
| 794 | - $texte = str_replace("href='#", "href='$base#", $texte); |
|
| 795 | - } |
|
| 796 | - if (strpos($texte, 'href="#') !== false) { |
|
| 797 | - $texte = str_replace('href="#', "href=\"$base#", $texte); |
|
| 798 | - } |
|
| 799 | - } |
|
| 800 | - } |
|
| 734 | + static $set_html_base = null; |
|
| 735 | + if (is_null($set_html_base)) { |
|
| 736 | + if (!defined('_SET_HTML_BASE')) { |
|
| 737 | + // si la profondeur est superieure a 1 |
|
| 738 | + // est que ce n'est pas une url page ni une url action |
|
| 739 | + // activer par defaut |
|
| 740 | + $set_html_base = (( |
|
| 741 | + $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2) |
|
| 742 | + and _request(_SPIP_PAGE) !== 'login' |
|
| 743 | + and !_request('action')) ? true : false); |
|
| 744 | + } else { |
|
| 745 | + $set_html_base = _SET_HTML_BASE; |
|
| 746 | + } |
|
| 747 | + } |
|
| 748 | + |
|
| 749 | + if ( |
|
| 750 | + $set_html_base |
|
| 751 | + and isset($GLOBALS['html']) and $GLOBALS['html'] |
|
| 752 | + and $GLOBALS['profondeur_url'] > 0 |
|
| 753 | + and ($poshead = strpos($texte, '</head>')) !== false |
|
| 754 | + ) { |
|
| 755 | + $head = substr($texte, 0, $poshead); |
|
| 756 | + $insert = false; |
|
| 757 | + $href_base = false; |
|
| 758 | + if (strpos($head, '<base') === false) { |
|
| 759 | + $insert = true; |
|
| 760 | + } else { |
|
| 761 | + // si aucun <base ...> n'a de href il faut en inserer un |
|
| 762 | + // sinon juste re-ecrire les ancres si besoin |
|
| 763 | + $insert = true; |
|
| 764 | + include_spip('inc/filtres'); |
|
| 765 | + $bases = extraire_balises($head, 'base'); |
|
| 766 | + foreach ($bases as $base) { |
|
| 767 | + if ($href_base = extraire_attribut($base, 'href')) { |
|
| 768 | + $insert = false; |
|
| 769 | + break; |
|
| 770 | + } |
|
| 771 | + } |
|
| 772 | + } |
|
| 773 | + |
|
| 774 | + if ($insert) { |
|
| 775 | + include_spip('inc/filtres_mini'); |
|
| 776 | + // ajouter un base qui reglera tous les liens relatifs |
|
| 777 | + $href_base = url_absolue('./'); |
|
| 778 | + $base = "\n<base href=\"$href_base\" />"; |
|
| 779 | + if (($pos = strpos($head, '<head>')) !== false) { |
|
| 780 | + $head = substr_replace($head, $base, $pos + 6, 0); |
|
| 781 | + } elseif (preg_match(',<head[^>]*>,i', $head, $r)) { |
|
| 782 | + $head = str_replace($r[0], $r[0] . $base, $head); |
|
| 783 | + } |
|
| 784 | + $texte = $head . substr($texte, $poshead); |
|
| 785 | + } |
|
| 786 | + if ($href_base) { |
|
| 787 | + // gerer les ancres |
|
| 788 | + $base = $_SERVER['REQUEST_URI']; |
|
| 789 | + // pas de guillemets ni < dans l'URL qu'on insere dans le HTML |
|
| 790 | + if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) { |
|
| 791 | + $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base); |
|
| 792 | + } |
|
| 793 | + if (strpos($texte, "href='#") !== false) { |
|
| 794 | + $texte = str_replace("href='#", "href='$base#", $texte); |
|
| 795 | + } |
|
| 796 | + if (strpos($texte, 'href="#') !== false) { |
|
| 797 | + $texte = str_replace('href="#', "href=\"$base#", $texte); |
|
| 798 | + } |
|
| 799 | + } |
|
| 800 | + } |
|
| 801 | 801 | } |
| 802 | 802 | |
| 803 | 803 | |
| 804 | 804 | // Envoyer les entetes, en retenant ceux qui sont a usage interne |
| 805 | 805 | // et demarrent par X-Spip-... |
| 806 | 806 | function envoyer_entetes($entetes) { |
| 807 | - foreach ($entetes as $k => $v) { # if (strncmp($k, 'X-Spip-', 7)) |
|
| 808 | - @header(strlen($v) ? "$k: $v" : $k); |
|
| 809 | - } |
|
| 807 | + foreach ($entetes as $k => $v) { # if (strncmp($k, 'X-Spip-', 7)) |
|
| 808 | + @header(strlen($v) ? "$k: $v" : $k); |
|
| 809 | + } |
|
| 810 | 810 | } |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | **/ |
| 17 | 17 | |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | |
@@ -31,7 +31,7 @@ discard block |
||
| 31 | 31 | * Code PHP compilé de la boucle |
| 32 | 32 | **/ |
| 33 | 33 | function boucle_DEFAUT_dist($id_boucle, &$boucles) { |
| 34 | - return calculer_boucle($id_boucle, $boucles); |
|
| 34 | + return calculer_boucle($id_boucle, $boucles); |
|
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 37 | |
@@ -50,7 +50,7 @@ discard block |
||
| 50 | 50 | * Code PHP compilé de la boucle |
| 51 | 51 | **/ |
| 52 | 52 | function boucle_BOUCLE_dist($id_boucle, &$boucles) { |
| 53 | - return calculer_boucle($id_boucle, $boucles); |
|
| 53 | + return calculer_boucle($id_boucle, $boucles); |
|
| 54 | 54 | } |
| 55 | 55 | |
| 56 | 56 | |
@@ -80,30 +80,30 @@ discard block |
||
| 80 | 80 | * Code PHP compilé de la boucle |
| 81 | 81 | **/ |
| 82 | 82 | function boucle_HIERARCHIE_dist($id_boucle, &$boucles) { |
| 83 | - $boucle = &$boucles[$id_boucle]; |
|
| 84 | - $id_table = $boucle->id_table . '.id_rubrique'; |
|
| 83 | + $boucle = &$boucles[$id_boucle]; |
|
| 84 | + $id_table = $boucle->id_table . '.id_rubrique'; |
|
| 85 | 85 | |
| 86 | - // Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille |
|
| 87 | - // sauf en presence du critere {tout} (vu par phraser_html) |
|
| 88 | - // ou {id_article} qui positionne aussi le {tout} |
|
| 86 | + // Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille |
|
| 87 | + // sauf en presence du critere {tout} (vu par phraser_html) |
|
| 88 | + // ou {id_article} qui positionne aussi le {tout} |
|
| 89 | 89 | |
| 90 | - $boucle->hierarchie = 'if (!($id_rubrique = intval(' |
|
| 91 | - . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles) |
|
| 92 | - . ")))\n\t\treturn '';\n\t" |
|
| 93 | - . "include_spip('inc/rubriques');\n\t" |
|
| 94 | - . '$hierarchie = calcul_hierarchie_in($id_rubrique,' |
|
| 95 | - . (isset($boucle->modificateur['tout']) ? 'true' : 'false') |
|
| 96 | - . ");\n\t" |
|
| 97 | - . 'if (!$hierarchie) return "";' . "\n\t"; |
|
| 90 | + $boucle->hierarchie = 'if (!($id_rubrique = intval(' |
|
| 91 | + . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles) |
|
| 92 | + . ")))\n\t\treturn '';\n\t" |
|
| 93 | + . "include_spip('inc/rubriques');\n\t" |
|
| 94 | + . '$hierarchie = calcul_hierarchie_in($id_rubrique,' |
|
| 95 | + . (isset($boucle->modificateur['tout']) ? 'true' : 'false') |
|
| 96 | + . ");\n\t" |
|
| 97 | + . 'if (!$hierarchie) return "";' . "\n\t"; |
|
| 98 | 98 | |
| 99 | - $boucle->where[] = ["'IN'", "'$id_table'", '"($hierarchie)"']; |
|
| 99 | + $boucle->where[] = ["'IN'", "'$id_table'", '"($hierarchie)"']; |
|
| 100 | 100 | |
| 101 | - $order = "FIELD($id_table, \$hierarchie)"; |
|
| 102 | - if (!isset($boucle->default_order[0]) || $boucle->default_order[0] != ' DESC') { |
|
| 103 | - $boucle->default_order[] = "\"$order\""; |
|
| 104 | - } else { |
|
| 105 | - $boucle->default_order[0] = "\"$order DESC\""; |
|
| 106 | - } |
|
| 101 | + $order = "FIELD($id_table, \$hierarchie)"; |
|
| 102 | + if (!isset($boucle->default_order[0]) || $boucle->default_order[0] != ' DESC') { |
|
| 103 | + $boucle->default_order[] = "\"$order\""; |
|
| 104 | + } else { |
|
| 105 | + $boucle->default_order[0] = "\"$order DESC\""; |
|
| 106 | + } |
|
| 107 | 107 | |
| 108 | - return calculer_boucle($id_boucle, $boucles); |
|
| 108 | + return calculer_boucle($id_boucle, $boucles); |
|
| 109 | 109 | } |
@@ -22,7 +22,7 @@ discard block |
||
| 22 | 22 | **/ |
| 23 | 23 | |
| 24 | 24 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 25 | - return; |
|
| 25 | + return; |
|
| 26 | 26 | } |
| 27 | 27 | |
| 28 | 28 | // public/interfaces definit des traitements sur les champs qui utilisent des fonctions de inc/texte |
@@ -54,75 +54,75 @@ discard block |
||
| 54 | 54 | * Introduction calculée |
| 55 | 55 | **/ |
| 56 | 56 | function filtre_introduction_dist($descriptif, $texte, $longueur, $connect, $suite = null) { |
| 57 | - // Si un descriptif est envoye, on l'utilise directement |
|
| 58 | - if (strlen($descriptif)) { |
|
| 59 | - return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect); |
|
| 60 | - } |
|
| 61 | - |
|
| 62 | - // De preference ce qui est marque <intro>...</intro> |
|
| 63 | - $intro = ''; |
|
| 64 | - $texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules |
|
| 65 | - while ($fin = strpos($texte, '</intro>')) { |
|
| 66 | - $zone = substr($texte, 0, $fin); |
|
| 67 | - $texte = substr($texte, $fin + strlen('</intro>')); |
|
| 68 | - if (($deb = strpos($zone, '<intro>')) || str_starts_with($zone, '<intro>')) { |
|
| 69 | - $zone = substr($zone, $deb + 7); |
|
| 70 | - } |
|
| 71 | - $intro .= $zone; |
|
| 72 | - } |
|
| 73 | - |
|
| 74 | - // [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut, |
|
| 75 | - // qui inclus raccourcis et modeles |
|
| 76 | - // un simple <articlexx> peut etre ensuite transforme en 1000 lignes ... |
|
| 77 | - // par ailleurs le nettoyage des raccourcis ne tient pas compte |
|
| 78 | - // des surcharges et enrichissement de propre |
|
| 79 | - // couper doit se faire apres propre |
|
| 80 | - //$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect); |
|
| 81 | - |
|
| 82 | - // Cependant pour des questions de perfs on coupe quand meme, en prenant |
|
| 83 | - // large et en se mefiant des tableaux #1323 |
|
| 84 | - |
|
| 85 | - if (strlen($intro)) { |
|
| 86 | - $texte = $intro; |
|
| 87 | - } else { |
|
| 88 | - if ( |
|
| 89 | - !str_contains("\n" . $texte, "\n|") |
|
| 90 | - && strlen($texte) > 2.5 * $longueur |
|
| 91 | - ) { |
|
| 92 | - if (str_contains($texte, '<multi')) { |
|
| 93 | - $texte = extraire_multi($texte); |
|
| 94 | - } |
|
| 95 | - $texte = couper($texte, 2 * $longueur); |
|
| 96 | - } |
|
| 97 | - } |
|
| 98 | - |
|
| 99 | - // ne pas tenir compte des notes |
|
| 100 | - if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 101 | - $notes('', 'empiler'); |
|
| 102 | - } |
|
| 103 | - // Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable |
|
| 104 | - // dans l'introduction. |
|
| 105 | - $texte = supprime_img($texte, ''); |
|
| 106 | - $texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect); |
|
| 107 | - |
|
| 108 | - if ($notes) { |
|
| 109 | - $notes('', 'depiler'); |
|
| 110 | - } |
|
| 111 | - |
|
| 112 | - if (is_null($suite) && defined('_INTRODUCTION_SUITE')) { |
|
| 113 | - $suite = _INTRODUCTION_SUITE; |
|
| 114 | - } |
|
| 115 | - $texte = couper($texte, $longueur, $suite); |
|
| 116 | - // comme on a coupe il faut repasser la typo (on a perdu les insecables) |
|
| 117 | - $texte = typo($texte, true, $connect, []); |
|
| 118 | - |
|
| 119 | - // et reparagrapher si necessaire (coherence avec le cas descriptif) |
|
| 120 | - // une introduction a tojours un <p> |
|
| 121 | - if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes |
|
| 122 | - $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']); |
|
| 123 | - } |
|
| 124 | - |
|
| 125 | - return $texte; |
|
| 57 | + // Si un descriptif est envoye, on l'utilise directement |
|
| 58 | + if (strlen($descriptif)) { |
|
| 59 | + return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect); |
|
| 60 | + } |
|
| 61 | + |
|
| 62 | + // De preference ce qui est marque <intro>...</intro> |
|
| 63 | + $intro = ''; |
|
| 64 | + $texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules |
|
| 65 | + while ($fin = strpos($texte, '</intro>')) { |
|
| 66 | + $zone = substr($texte, 0, $fin); |
|
| 67 | + $texte = substr($texte, $fin + strlen('</intro>')); |
|
| 68 | + if (($deb = strpos($zone, '<intro>')) || str_starts_with($zone, '<intro>')) { |
|
| 69 | + $zone = substr($zone, $deb + 7); |
|
| 70 | + } |
|
| 71 | + $intro .= $zone; |
|
| 72 | + } |
|
| 73 | + |
|
| 74 | + // [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut, |
|
| 75 | + // qui inclus raccourcis et modeles |
|
| 76 | + // un simple <articlexx> peut etre ensuite transforme en 1000 lignes ... |
|
| 77 | + // par ailleurs le nettoyage des raccourcis ne tient pas compte |
|
| 78 | + // des surcharges et enrichissement de propre |
|
| 79 | + // couper doit se faire apres propre |
|
| 80 | + //$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect); |
|
| 81 | + |
|
| 82 | + // Cependant pour des questions de perfs on coupe quand meme, en prenant |
|
| 83 | + // large et en se mefiant des tableaux #1323 |
|
| 84 | + |
|
| 85 | + if (strlen($intro)) { |
|
| 86 | + $texte = $intro; |
|
| 87 | + } else { |
|
| 88 | + if ( |
|
| 89 | + !str_contains("\n" . $texte, "\n|") |
|
| 90 | + && strlen($texte) > 2.5 * $longueur |
|
| 91 | + ) { |
|
| 92 | + if (str_contains($texte, '<multi')) { |
|
| 93 | + $texte = extraire_multi($texte); |
|
| 94 | + } |
|
| 95 | + $texte = couper($texte, 2 * $longueur); |
|
| 96 | + } |
|
| 97 | + } |
|
| 98 | + |
|
| 99 | + // ne pas tenir compte des notes |
|
| 100 | + if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 101 | + $notes('', 'empiler'); |
|
| 102 | + } |
|
| 103 | + // Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable |
|
| 104 | + // dans l'introduction. |
|
| 105 | + $texte = supprime_img($texte, ''); |
|
| 106 | + $texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect); |
|
| 107 | + |
|
| 108 | + if ($notes) { |
|
| 109 | + $notes('', 'depiler'); |
|
| 110 | + } |
|
| 111 | + |
|
| 112 | + if (is_null($suite) && defined('_INTRODUCTION_SUITE')) { |
|
| 113 | + $suite = _INTRODUCTION_SUITE; |
|
| 114 | + } |
|
| 115 | + $texte = couper($texte, $longueur, $suite); |
|
| 116 | + // comme on a coupe il faut repasser la typo (on a perdu les insecables) |
|
| 117 | + $texte = typo($texte, true, $connect, []); |
|
| 118 | + |
|
| 119 | + // et reparagrapher si necessaire (coherence avec le cas descriptif) |
|
| 120 | + // une introduction a tojours un <p> |
|
| 121 | + if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes |
|
| 122 | + $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']); |
|
| 123 | + } |
|
| 124 | + |
|
| 125 | + return $texte; |
|
| 126 | 126 | } |
| 127 | 127 | |
| 128 | 128 | |
@@ -157,64 +157,64 @@ discard block |
||
| 157 | 157 | * Code HTML de la pagination |
| 158 | 158 | **/ |
| 159 | 159 | function filtre_pagination_dist( |
| 160 | - $total, |
|
| 161 | - $nom, |
|
| 162 | - $position, |
|
| 163 | - $pas, |
|
| 164 | - $liste = true, |
|
| 165 | - $modele = '', |
|
| 166 | - string $connect = '', |
|
| 167 | - $env = [] |
|
| 160 | + $total, |
|
| 161 | + $nom, |
|
| 162 | + $position, |
|
| 163 | + $pas, |
|
| 164 | + $liste = true, |
|
| 165 | + $modele = '', |
|
| 166 | + string $connect = '', |
|
| 167 | + $env = [] |
|
| 168 | 168 | ) { |
| 169 | - static $ancres = []; |
|
| 170 | - if ($pas < 1) { |
|
| 171 | - return ''; |
|
| 172 | - } |
|
| 173 | - $ancre = 'pagination' . $nom; // #pagination_articles |
|
| 174 | - $debut = 'debut' . $nom; // 'debut_articles' |
|
| 175 | - |
|
| 176 | - // n'afficher l'ancre qu'une fois |
|
| 177 | - $bloc_ancre = isset($ancres[$ancre]) ? '' : ($ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>"); |
|
| 178 | - // liste = false : on ne veut que l'ancre |
|
| 179 | - if (!$liste) { |
|
| 180 | - return $ancres[$ancre]; |
|
| 181 | - } |
|
| 182 | - |
|
| 183 | - $self = (empty($env['self']) ? self() : $env['self']); |
|
| 184 | - $pagination = [ |
|
| 185 | - 'debut' => $debut, |
|
| 186 | - 'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel |
|
| 187 | - 'total' => $total, |
|
| 188 | - 'position' => (int) $position, |
|
| 189 | - 'pas' => $pas, |
|
| 190 | - 'nombre_pages' => floor(($total - 1) / $pas) + 1, |
|
| 191 | - 'page_courante' => floor((int) $position / $pas) + 1, |
|
| 192 | - 'ancre' => $ancre, |
|
| 193 | - 'bloc_ancre' => $bloc_ancre |
|
| 194 | - ]; |
|
| 195 | - if (is_array($env)) { |
|
| 196 | - $pagination = array_merge($env, $pagination); |
|
| 197 | - } |
|
| 198 | - |
|
| 199 | - // Pas de pagination |
|
| 200 | - if ($pagination['nombre_pages'] <= 1) { |
|
| 201 | - return ''; |
|
| 202 | - } |
|
| 203 | - |
|
| 204 | - if ($modele) { |
|
| 205 | - $pagination['type_pagination'] = $modele; |
|
| 206 | - $modele = trouver_fond('pagination_' . $modele, 'modeles') ? '_' . $modele : ''; |
|
| 207 | - } |
|
| 208 | - |
|
| 209 | - if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) { |
|
| 210 | - define('_PAGINATION_NOMBRE_LIENS_MAX', 10); |
|
| 211 | - } |
|
| 212 | - if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) { |
|
| 213 | - define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5); |
|
| 214 | - } |
|
| 215 | - |
|
| 216 | - |
|
| 217 | - return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect); |
|
| 169 | + static $ancres = []; |
|
| 170 | + if ($pas < 1) { |
|
| 171 | + return ''; |
|
| 172 | + } |
|
| 173 | + $ancre = 'pagination' . $nom; // #pagination_articles |
|
| 174 | + $debut = 'debut' . $nom; // 'debut_articles' |
|
| 175 | + |
|
| 176 | + // n'afficher l'ancre qu'une fois |
|
| 177 | + $bloc_ancre = isset($ancres[$ancre]) ? '' : ($ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>"); |
|
| 178 | + // liste = false : on ne veut que l'ancre |
|
| 179 | + if (!$liste) { |
|
| 180 | + return $ancres[$ancre]; |
|
| 181 | + } |
|
| 182 | + |
|
| 183 | + $self = (empty($env['self']) ? self() : $env['self']); |
|
| 184 | + $pagination = [ |
|
| 185 | + 'debut' => $debut, |
|
| 186 | + 'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel |
|
| 187 | + 'total' => $total, |
|
| 188 | + 'position' => (int) $position, |
|
| 189 | + 'pas' => $pas, |
|
| 190 | + 'nombre_pages' => floor(($total - 1) / $pas) + 1, |
|
| 191 | + 'page_courante' => floor((int) $position / $pas) + 1, |
|
| 192 | + 'ancre' => $ancre, |
|
| 193 | + 'bloc_ancre' => $bloc_ancre |
|
| 194 | + ]; |
|
| 195 | + if (is_array($env)) { |
|
| 196 | + $pagination = array_merge($env, $pagination); |
|
| 197 | + } |
|
| 198 | + |
|
| 199 | + // Pas de pagination |
|
| 200 | + if ($pagination['nombre_pages'] <= 1) { |
|
| 201 | + return ''; |
|
| 202 | + } |
|
| 203 | + |
|
| 204 | + if ($modele) { |
|
| 205 | + $pagination['type_pagination'] = $modele; |
|
| 206 | + $modele = trouver_fond('pagination_' . $modele, 'modeles') ? '_' . $modele : ''; |
|
| 207 | + } |
|
| 208 | + |
|
| 209 | + if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) { |
|
| 210 | + define('_PAGINATION_NOMBRE_LIENS_MAX', 10); |
|
| 211 | + } |
|
| 212 | + if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) { |
|
| 213 | + define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5); |
|
| 214 | + } |
|
| 215 | + |
|
| 216 | + |
|
| 217 | + return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect); |
|
| 218 | 218 | } |
| 219 | 219 | |
| 220 | 220 | |
@@ -233,38 +233,38 @@ discard block |
||
| 233 | 233 | * Liste (première page, dernière page). |
| 234 | 234 | **/ |
| 235 | 235 | function filtre_bornes_pagination_dist($courante, $nombre, $max = 10) { |
| 236 | - if ($max <= 0 || $max >= $nombre) { |
|
| 237 | - return [1, $nombre]; |
|
| 238 | - } |
|
| 239 | - if ($max <= 1) { |
|
| 240 | - return [$courante, $courante]; |
|
| 241 | - } |
|
| 242 | - |
|
| 243 | - $premiere = max(1, $courante - floor(($max - 1) / 2)); |
|
| 244 | - $derniere = min($nombre, $premiere + $max - 2); |
|
| 245 | - $premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere; |
|
| 246 | - |
|
| 247 | - return [$premiere, $derniere]; |
|
| 236 | + if ($max <= 0 || $max >= $nombre) { |
|
| 237 | + return [1, $nombre]; |
|
| 238 | + } |
|
| 239 | + if ($max <= 1) { |
|
| 240 | + return [$courante, $courante]; |
|
| 241 | + } |
|
| 242 | + |
|
| 243 | + $premiere = max(1, $courante - floor(($max - 1) / 2)); |
|
| 244 | + $derniere = min($nombre, $premiere + $max - 2); |
|
| 245 | + $premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere; |
|
| 246 | + |
|
| 247 | + return [$premiere, $derniere]; |
|
| 248 | 248 | } |
| 249 | 249 | |
| 250 | 250 | function filtre_pagination_affiche_texte_lien_page_dist($type_pagination, $numero_page, $rang_item) { |
| 251 | - if ($numero_page === 'tous') { |
|
| 252 | - return '∞'; |
|
| 253 | - } |
|
| 254 | - if ($numero_page === 'prev') { |
|
| 255 | - return '<'; |
|
| 256 | - } |
|
| 257 | - if ($numero_page === 'next') { |
|
| 258 | - return '>'; |
|
| 259 | - } |
|
| 260 | - |
|
| 261 | - return match ($type_pagination) { |
|
| 262 | - 'resultats' => $rang_item + 1, // 1 11 21 31... |
|
| 263 | - 'naturel' => $rang_item ?: 1, // 1 10 20 30... |
|
| 264 | - 'rang' => $rang_item, // 0 10 20 30... |
|
| 265 | - 'page', 'prive' => $numero_page, // 1 2 3 4 5... |
|
| 266 | - default => $numero_page, // 1 2 3 4 5... |
|
| 267 | - }; |
|
| 251 | + if ($numero_page === 'tous') { |
|
| 252 | + return '∞'; |
|
| 253 | + } |
|
| 254 | + if ($numero_page === 'prev') { |
|
| 255 | + return '<'; |
|
| 256 | + } |
|
| 257 | + if ($numero_page === 'next') { |
|
| 258 | + return '>'; |
|
| 259 | + } |
|
| 260 | + |
|
| 261 | + return match ($type_pagination) { |
|
| 262 | + 'resultats' => $rang_item + 1, // 1 11 21 31... |
|
| 263 | + 'naturel' => $rang_item ?: 1, // 1 10 20 30... |
|
| 264 | + 'rang' => $rang_item, // 0 10 20 30... |
|
| 265 | + 'page', 'prive' => $numero_page, // 1 2 3 4 5... |
|
| 266 | + default => $numero_page, // 1 2 3 4 5... |
|
| 267 | + }; |
|
| 268 | 268 | } |
| 269 | 269 | |
| 270 | 270 | /** |
@@ -277,15 +277,15 @@ discard block |
||
| 277 | 277 | **/ |
| 278 | 278 | function lister_objets_avec_logos($type) { |
| 279 | 279 | |
| 280 | - $objet = objet_type($type); |
|
| 281 | - $ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet)); |
|
| 282 | - if ($ids) { |
|
| 283 | - $ids = array_column($ids, 'id_objet'); |
|
| 284 | - return implode(',', $ids); |
|
| 285 | - } |
|
| 286 | - else { |
|
| 287 | - return '0'; |
|
| 288 | - } |
|
| 280 | + $objet = objet_type($type); |
|
| 281 | + $ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet)); |
|
| 282 | + if ($ids) { |
|
| 283 | + $ids = array_column($ids, 'id_objet'); |
|
| 284 | + return implode(',', $ids); |
|
| 285 | + } |
|
| 286 | + else { |
|
| 287 | + return '0'; |
|
| 288 | + } |
|
| 289 | 289 | } |
| 290 | 290 | |
| 291 | 291 | |
@@ -301,14 +301,14 @@ discard block |
||
| 301 | 301 | * Code HTML des notes |
| 302 | 302 | **/ |
| 303 | 303 | function calculer_notes() { |
| 304 | - $r = ''; |
|
| 305 | - if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 306 | - $r = $notes([]); |
|
| 307 | - $notes('', 'depiler'); |
|
| 308 | - $notes('', 'empiler'); |
|
| 309 | - } |
|
| 310 | - |
|
| 311 | - return $r; |
|
| 304 | + $r = ''; |
|
| 305 | + if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 306 | + $r = $notes([]); |
|
| 307 | + $notes('', 'depiler'); |
|
| 308 | + $notes('', 'empiler'); |
|
| 309 | + } |
|
| 310 | + |
|
| 311 | + return $r; |
|
| 312 | 312 | } |
| 313 | 313 | |
| 314 | 314 | |
@@ -325,10 +325,10 @@ discard block |
||
| 325 | 325 | * @return string |
| 326 | 326 | */ |
| 327 | 327 | function retrouver_rang_lien($objet_source, $ids, $objet_lie, $idl, $objet_lien) { |
| 328 | - $res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien); |
|
| 329 | - $res = array_column($res, 'rang_lien', $objet_source); |
|
| 328 | + $res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien); |
|
| 329 | + $res = array_column($res, 'rang_lien', $objet_source); |
|
| 330 | 330 | |
| 331 | - return ($res[$ids] ?? ''); |
|
| 331 | + return ($res[$ids] ?? ''); |
|
| 332 | 332 | } |
| 333 | 333 | |
| 334 | 334 | |
@@ -345,19 +345,19 @@ discard block |
||
| 345 | 345 | * @private |
| 346 | 346 | */ |
| 347 | 347 | function lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien) { |
| 348 | - static $liens = []; |
|
| 349 | - if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) { |
|
| 350 | - include_spip('action/editer_liens'); |
|
| 351 | - // quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source |
|
| 352 | - if ($objet_lien == $objet && $objet_lien !== $objet_source) { |
|
| 353 | - $res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']); |
|
| 354 | - } else { |
|
| 355 | - $res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]); |
|
| 356 | - } |
|
| 357 | - |
|
| 358 | - $liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res; |
|
| 359 | - } |
|
| 360 | - return $liens["$objet_source-$objet-$id_objet-$objet_lien"]; |
|
| 348 | + static $liens = []; |
|
| 349 | + if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) { |
|
| 350 | + include_spip('action/editer_liens'); |
|
| 351 | + // quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source |
|
| 352 | + if ($objet_lien == $objet && $objet_lien !== $objet_source) { |
|
| 353 | + $res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']); |
|
| 354 | + } else { |
|
| 355 | + $res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]); |
|
| 356 | + } |
|
| 357 | + |
|
| 358 | + $liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res; |
|
| 359 | + } |
|
| 360 | + return $liens["$objet_source-$objet-$id_objet-$objet_lien"]; |
|
| 361 | 361 | } |
| 362 | 362 | |
| 363 | 363 | /** |
@@ -371,24 +371,24 @@ discard block |
||
| 371 | 371 | * @return int|string |
| 372 | 372 | */ |
| 373 | 373 | function calculer_rang_smart($titre, $objet_source, $id, $env) { |
| 374 | - // Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien |
|
| 375 | - // permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens |
|
| 376 | - if ( |
|
| 377 | - isset($env['form']) && $env['form'] |
|
| 378 | - && isset($env['_objet_lien']) && $env['_objet_lien'] |
|
| 379 | - && (function_exists('lien_triables') || include_spip('action/editer_liens')) |
|
| 380 | - && ($r = objet_associable($env['_objet_lien'])) |
|
| 381 | - && ([$p, $table_lien] = $r) |
|
| 382 | - && lien_triables($table_lien) |
|
| 383 | - && isset($env['objet']) && $env['objet'] |
|
| 384 | - && isset($env['id_objet']) && $env['id_objet'] |
|
| 385 | - && $objet_source |
|
| 386 | - && ($id = (int) $id) |
|
| 387 | - ) { |
|
| 388 | - $rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']); |
|
| 389 | - return ($rang ?: ''); |
|
| 390 | - } |
|
| 391 | - return recuperer_numero($titre); |
|
| 374 | + // Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien |
|
| 375 | + // permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens |
|
| 376 | + if ( |
|
| 377 | + isset($env['form']) && $env['form'] |
|
| 378 | + && isset($env['_objet_lien']) && $env['_objet_lien'] |
|
| 379 | + && (function_exists('lien_triables') || include_spip('action/editer_liens')) |
|
| 380 | + && ($r = objet_associable($env['_objet_lien'])) |
|
| 381 | + && ([$p, $table_lien] = $r) |
|
| 382 | + && lien_triables($table_lien) |
|
| 383 | + && isset($env['objet']) && $env['objet'] |
|
| 384 | + && isset($env['id_objet']) && $env['id_objet'] |
|
| 385 | + && $objet_source |
|
| 386 | + && ($id = (int) $id) |
|
| 387 | + ) { |
|
| 388 | + $rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']); |
|
| 389 | + return ($rang ?: ''); |
|
| 390 | + } |
|
| 391 | + return recuperer_numero($titre); |
|
| 392 | 392 | } |
| 393 | 393 | |
| 394 | 394 | /** |
@@ -415,72 +415,72 @@ discard block |
||
| 415 | 415 | */ |
| 416 | 416 | function calculer_balise_tri(string $champ_ou_sens, string $libelle, string $classe, string $tri_nom, string $tri_champ, string $tri_sens, $liste_tri_sens_defaut): string { |
| 417 | 417 | |
| 418 | - $url = self('&'); |
|
| 419 | - $tri_sens = (int) $tri_sens; |
|
| 420 | - $alias_sens = [ |
|
| 421 | - '<' => -1, |
|
| 422 | - '>' => 1, |
|
| 423 | - 'inverse' => -1, |
|
| 424 | - ]; |
|
| 425 | - |
|
| 426 | - // Normaliser la liste des sens de tri par défaut |
|
| 427 | - // On ajoute un jocker pour les champs non présents dans la liste |
|
| 428 | - // avec la valeur du 1er item de la liste, idem critère {tri} |
|
| 429 | - if (is_array($liste_tri_sens_defaut)) { |
|
| 430 | - $liste_tri_sens_defaut['*'] = array_values($liste_tri_sens_defaut)[0]; |
|
| 431 | - } else { |
|
| 432 | - $liste_tri_sens_defaut = [ |
|
| 433 | - '*' => (int) ($alias_sens[$liste_tri_sens_defaut] ?? $liste_tri_sens_defaut), |
|
| 434 | - ]; |
|
| 435 | - } |
|
| 436 | - |
|
| 437 | - // Les sens de tri actuel et nouveau : |
|
| 438 | - // Soit c'est un sens fixe donné en paramètre (< ou >) |
|
| 439 | - $is_sens_fixe = array_key_exists($champ_ou_sens, $alias_sens); |
|
| 440 | - if ($is_sens_fixe) { |
|
| 441 | - $tri_sens_actuel = $tri_sens; |
|
| 442 | - $tri_sens_nouveau = $alias_sens[$champ_ou_sens]; |
|
| 443 | - // Soit c'est le champ utilisé actuellement pour le tri → on inverse le sens |
|
| 444 | - } elseif ($champ_ou_sens === $tri_champ) { |
|
| 445 | - $tri_sens_actuel = $tri_sens; |
|
| 446 | - $tri_sens_nouveau = $tri_sens * -1; |
|
| 447 | - // Sinon c'est un nouveau champ, et on prend son tri par défaut |
|
| 448 | - } else { |
|
| 449 | - $tri_sens_actuel = $tri_sens_nouveau = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 450 | - } |
|
| 451 | - |
|
| 452 | - // URL : ajouter le champ sur lequel porte le tri |
|
| 453 | - if (!$is_sens_fixe) { |
|
| 454 | - $param_tri = "tri$tri_nom"; |
|
| 455 | - $url = parametre_url($url, $param_tri, $champ_ou_sens); |
|
| 456 | - } |
|
| 457 | - |
|
| 458 | - // URL : n'ajouter le sens de tri que si nécessaire, |
|
| 459 | - // c.à.d différent du sens par défaut pour le champ |
|
| 460 | - $param_sens = "sens$tri_nom"; |
|
| 461 | - $tri_sens_defaut_champ = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 462 | - if ($tri_sens_nouveau !== $tri_sens_defaut_champ) { |
|
| 463 | - $url = parametre_url($url, $param_sens, $tri_sens_nouveau); |
|
| 464 | - } else { |
|
| 465 | - $url = parametre_url($url, $param_sens, ''); |
|
| 466 | - } |
|
| 467 | - |
|
| 468 | - // Drapeau pour garder en session ? |
|
| 469 | - $param_memo = ($is_sens_fixe ? $param_sens : $param_tri); |
|
| 470 | - $url = parametre_url($url, 'var_memotri', str_starts_with($tri_nom, 'session') ? $param_memo : ''); |
|
| 471 | - |
|
| 472 | - // Classes : on indique le sens de tri et l'item exposé |
|
| 473 | - if (!$is_sens_fixe) { |
|
| 474 | - $classe .= ' item-tri item-tri_' . ($tri_sens_actuel === 1 ? 'asc' : 'desc'); |
|
| 475 | - } |
|
| 476 | - if ($champ_ou_sens === $tri_champ) { |
|
| 477 | - $classe .= ' item-tri_actif'; |
|
| 478 | - } |
|
| 479 | - |
|
| 480 | - // Lien |
|
| 481 | - $balise = lien_ou_expose($url, $libelle, false, $classe); |
|
| 482 | - |
|
| 483 | - return $balise; |
|
| 418 | + $url = self('&'); |
|
| 419 | + $tri_sens = (int) $tri_sens; |
|
| 420 | + $alias_sens = [ |
|
| 421 | + '<' => -1, |
|
| 422 | + '>' => 1, |
|
| 423 | + 'inverse' => -1, |
|
| 424 | + ]; |
|
| 425 | + |
|
| 426 | + // Normaliser la liste des sens de tri par défaut |
|
| 427 | + // On ajoute un jocker pour les champs non présents dans la liste |
|
| 428 | + // avec la valeur du 1er item de la liste, idem critère {tri} |
|
| 429 | + if (is_array($liste_tri_sens_defaut)) { |
|
| 430 | + $liste_tri_sens_defaut['*'] = array_values($liste_tri_sens_defaut)[0]; |
|
| 431 | + } else { |
|
| 432 | + $liste_tri_sens_defaut = [ |
|
| 433 | + '*' => (int) ($alias_sens[$liste_tri_sens_defaut] ?? $liste_tri_sens_defaut), |
|
| 434 | + ]; |
|
| 435 | + } |
|
| 436 | + |
|
| 437 | + // Les sens de tri actuel et nouveau : |
|
| 438 | + // Soit c'est un sens fixe donné en paramètre (< ou >) |
|
| 439 | + $is_sens_fixe = array_key_exists($champ_ou_sens, $alias_sens); |
|
| 440 | + if ($is_sens_fixe) { |
|
| 441 | + $tri_sens_actuel = $tri_sens; |
|
| 442 | + $tri_sens_nouveau = $alias_sens[$champ_ou_sens]; |
|
| 443 | + // Soit c'est le champ utilisé actuellement pour le tri → on inverse le sens |
|
| 444 | + } elseif ($champ_ou_sens === $tri_champ) { |
|
| 445 | + $tri_sens_actuel = $tri_sens; |
|
| 446 | + $tri_sens_nouveau = $tri_sens * -1; |
|
| 447 | + // Sinon c'est un nouveau champ, et on prend son tri par défaut |
|
| 448 | + } else { |
|
| 449 | + $tri_sens_actuel = $tri_sens_nouveau = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 450 | + } |
|
| 451 | + |
|
| 452 | + // URL : ajouter le champ sur lequel porte le tri |
|
| 453 | + if (!$is_sens_fixe) { |
|
| 454 | + $param_tri = "tri$tri_nom"; |
|
| 455 | + $url = parametre_url($url, $param_tri, $champ_ou_sens); |
|
| 456 | + } |
|
| 457 | + |
|
| 458 | + // URL : n'ajouter le sens de tri que si nécessaire, |
|
| 459 | + // c.à.d différent du sens par défaut pour le champ |
|
| 460 | + $param_sens = "sens$tri_nom"; |
|
| 461 | + $tri_sens_defaut_champ = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 462 | + if ($tri_sens_nouveau !== $tri_sens_defaut_champ) { |
|
| 463 | + $url = parametre_url($url, $param_sens, $tri_sens_nouveau); |
|
| 464 | + } else { |
|
| 465 | + $url = parametre_url($url, $param_sens, ''); |
|
| 466 | + } |
|
| 467 | + |
|
| 468 | + // Drapeau pour garder en session ? |
|
| 469 | + $param_memo = ($is_sens_fixe ? $param_sens : $param_tri); |
|
| 470 | + $url = parametre_url($url, 'var_memotri', str_starts_with($tri_nom, 'session') ? $param_memo : ''); |
|
| 471 | + |
|
| 472 | + // Classes : on indique le sens de tri et l'item exposé |
|
| 473 | + if (!$is_sens_fixe) { |
|
| 474 | + $classe .= ' item-tri item-tri_' . ($tri_sens_actuel === 1 ? 'asc' : 'desc'); |
|
| 475 | + } |
|
| 476 | + if ($champ_ou_sens === $tri_champ) { |
|
| 477 | + $classe .= ' item-tri_actif'; |
|
| 478 | + } |
|
| 479 | + |
|
| 480 | + // Lien |
|
| 481 | + $balise = lien_ou_expose($url, $libelle, false, $classe); |
|
| 482 | + |
|
| 483 | + return $balise; |
|
| 484 | 484 | } |
| 485 | 485 | |
| 486 | 486 | |
@@ -496,7 +496,7 @@ discard block |
||
| 496 | 496 | * @return string |
| 497 | 497 | */ |
| 498 | 498 | function tri_protege_champ($t) { |
| 499 | - return preg_replace(',[^\s\w.+\[\]],', '', $t); |
|
| 499 | + return preg_replace(',[^\s\w.+\[\]],', '', $t); |
|
| 500 | 500 | } |
| 501 | 501 | |
| 502 | 502 | /** |
@@ -509,39 +509,39 @@ discard block |
||
| 509 | 509 | * @return string |
| 510 | 510 | */ |
| 511 | 511 | function tri_champ_order($t, $from = null, $senstri = '') { |
| 512 | - if (str_starts_with($t, 'multi ')) { |
|
| 513 | - return 'multi' . $senstri; |
|
| 514 | - } |
|
| 515 | - |
|
| 516 | - $champ = $t; |
|
| 517 | - |
|
| 518 | - $prefixe = ''; |
|
| 519 | - foreach (['num ', 'sinum '] as $p) { |
|
| 520 | - if (str_starts_with($t, $p)) { |
|
| 521 | - $champ = substr($t, strlen($p)); |
|
| 522 | - $prefixe = $p; |
|
| 523 | - } |
|
| 524 | - } |
|
| 525 | - |
|
| 526 | - // enlever les autres espaces non evacues par tri_protege_champ |
|
| 527 | - $champ = preg_replace(',\s,', '', $champ); |
|
| 528 | - |
|
| 529 | - if (is_array($from)) { |
|
| 530 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 531 | - foreach ($from as $idt => $table_sql) { |
|
| 532 | - if ( |
|
| 533 | - ($desc = $trouver_table($table_sql)) && isset($desc['field'][$champ]) |
|
| 534 | - ) { |
|
| 535 | - $champ = "$idt.$champ"; |
|
| 536 | - break; |
|
| 537 | - } |
|
| 538 | - } |
|
| 539 | - } |
|
| 540 | - return match ($prefixe) { |
|
| 541 | - 'num ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}", |
|
| 542 | - 'sinum ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}", |
|
| 543 | - default => $champ . $senstri, |
|
| 544 | - }; |
|
| 512 | + if (str_starts_with($t, 'multi ')) { |
|
| 513 | + return 'multi' . $senstri; |
|
| 514 | + } |
|
| 515 | + |
|
| 516 | + $champ = $t; |
|
| 517 | + |
|
| 518 | + $prefixe = ''; |
|
| 519 | + foreach (['num ', 'sinum '] as $p) { |
|
| 520 | + if (str_starts_with($t, $p)) { |
|
| 521 | + $champ = substr($t, strlen($p)); |
|
| 522 | + $prefixe = $p; |
|
| 523 | + } |
|
| 524 | + } |
|
| 525 | + |
|
| 526 | + // enlever les autres espaces non evacues par tri_protege_champ |
|
| 527 | + $champ = preg_replace(',\s,', '', $champ); |
|
| 528 | + |
|
| 529 | + if (is_array($from)) { |
|
| 530 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 531 | + foreach ($from as $idt => $table_sql) { |
|
| 532 | + if ( |
|
| 533 | + ($desc = $trouver_table($table_sql)) && isset($desc['field'][$champ]) |
|
| 534 | + ) { |
|
| 535 | + $champ = "$idt.$champ"; |
|
| 536 | + break; |
|
| 537 | + } |
|
| 538 | + } |
|
| 539 | + } |
|
| 540 | + return match ($prefixe) { |
|
| 541 | + 'num ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}", |
|
| 542 | + 'sinum ' => "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}", |
|
| 543 | + default => $champ . $senstri, |
|
| 544 | + }; |
|
| 545 | 545 | } |
| 546 | 546 | |
| 547 | 547 | /** |
@@ -555,17 +555,17 @@ discard block |
||
| 555 | 555 | * @return string |
| 556 | 556 | */ |
| 557 | 557 | function tri_champ_select($t) { |
| 558 | - if (str_starts_with($t, 'multi ')) { |
|
| 559 | - $t = substr($t, 6); |
|
| 560 | - $t = preg_replace(',\s,', '', $t); |
|
| 558 | + if (str_starts_with($t, 'multi ')) { |
|
| 559 | + $t = substr($t, 6); |
|
| 560 | + $t = preg_replace(',\s,', '', $t); |
|
| 561 | 561 | |
| 562 | - return sql_multi($t, $GLOBALS['spip_lang']); |
|
| 563 | - } |
|
| 564 | - if (trim($t) == 'hasard') { |
|
| 565 | - return 'rand() AS hasard'; |
|
| 566 | - } |
|
| 562 | + return sql_multi($t, $GLOBALS['spip_lang']); |
|
| 563 | + } |
|
| 564 | + if (trim($t) == 'hasard') { |
|
| 565 | + return 'rand() AS hasard'; |
|
| 566 | + } |
|
| 567 | 567 | |
| 568 | - return "''"; |
|
| 568 | + return "''"; |
|
| 569 | 569 | } |
| 570 | 570 | |
| 571 | 571 | /** |
@@ -577,15 +577,15 @@ discard block |
||
| 577 | 577 | * @return string |
| 578 | 578 | */ |
| 579 | 579 | function formate_liste_critere_par_ordre_liste($valeurs, $serveur = '') { |
| 580 | - if (!is_array($valeurs)) { |
|
| 581 | - return ''; |
|
| 582 | - } |
|
| 583 | - $f = sql_serveur('quote', $serveur, true); |
|
| 584 | - if (!is_string($f) || !$f) { |
|
| 585 | - return ''; |
|
| 586 | - } |
|
| 587 | - |
|
| 588 | - return implode(',', array_map($f, array_unique($valeurs))); |
|
| 580 | + if (!is_array($valeurs)) { |
|
| 581 | + return ''; |
|
| 582 | + } |
|
| 583 | + $f = sql_serveur('quote', $serveur, true); |
|
| 584 | + if (!is_string($f) || !$f) { |
|
| 585 | + return ''; |
|
| 586 | + } |
|
| 587 | + |
|
| 588 | + return implode(',', array_map($f, array_unique($valeurs))); |
|
| 589 | 589 | } |
| 590 | 590 | |
| 591 | 591 | /** |
@@ -608,22 +608,22 @@ discard block |
||
| 608 | 608 | * Valeur $defaut sinon. |
| 609 | 609 | **/ |
| 610 | 610 | function appliquer_filtre_sinon($arg, $filtre, $args, $defaut = '') { |
| 611 | - // Si c'est un filtre d'image, on utilise image_filtrer() |
|
| 612 | - // Attention : les 2 premiers arguments sont inversés dans ce cas |
|
| 613 | - if (trouver_filtre_matrice($filtre) && str_starts_with($filtre, 'image_')) { |
|
| 614 | - include_spip('inc/filtres_images_lib_mini'); |
|
| 615 | - $args[1] = $args[0]; |
|
| 616 | - $args[0] = $filtre; |
|
| 617 | - return image_graver(image_filtrer($args)); |
|
| 618 | - } |
|
| 619 | - |
|
| 620 | - $f = chercher_filtre($filtre); |
|
| 621 | - if (!$f) { |
|
| 622 | - return $defaut; |
|
| 623 | - } |
|
| 624 | - array_shift($args); // enlever $arg |
|
| 625 | - array_shift($args); // enlever $filtre |
|
| 626 | - return $f($arg, ...$args); |
|
| 611 | + // Si c'est un filtre d'image, on utilise image_filtrer() |
|
| 612 | + // Attention : les 2 premiers arguments sont inversés dans ce cas |
|
| 613 | + if (trouver_filtre_matrice($filtre) && str_starts_with($filtre, 'image_')) { |
|
| 614 | + include_spip('inc/filtres_images_lib_mini'); |
|
| 615 | + $args[1] = $args[0]; |
|
| 616 | + $args[0] = $filtre; |
|
| 617 | + return image_graver(image_filtrer($args)); |
|
| 618 | + } |
|
| 619 | + |
|
| 620 | + $f = chercher_filtre($filtre); |
|
| 621 | + if (!$f) { |
|
| 622 | + return $defaut; |
|
| 623 | + } |
|
| 624 | + array_shift($args); // enlever $arg |
|
| 625 | + array_shift($args); // enlever $filtre |
|
| 626 | + return $f($arg, ...$args); |
|
| 627 | 627 | } |
| 628 | 628 | |
| 629 | 629 | /** |
@@ -633,30 +633,30 @@ discard block |
||
| 633 | 633 | * @return string |
| 634 | 634 | */ |
| 635 | 635 | function filtre_styles_inline_page_login_pass_dist(&$Pile, ...$dummy) { |
| 636 | - $styles = ''; |
|
| 637 | - include_spip('inc/config'); |
|
| 638 | - if ($couleur = lire_config('couleur_login')) { |
|
| 639 | - include_spip('inc/filtres_images_mini'); |
|
| 640 | - $hs = couleur_hex_to_hsl($couleur, 'h, s'); |
|
| 641 | - $l = couleur_hex_to_hsl($couleur, 'l'); |
|
| 642 | - $styles .= ":root {--spip-login-color-theme--hs: {$hs};--spip-login-color-theme--l: {$l};}\n"; |
|
| 643 | - } |
|
| 644 | - $logo_bg = _DIR_IMG . 'spip_fond_login.jpg'; |
|
| 645 | - if (file_exists($logo_bg)) { |
|
| 646 | - include_spip('inc/filtres_images_mini'); |
|
| 647 | - $logo_mini = image_reduire($logo_bg, 64, 64); |
|
| 648 | - $logo_mini = extraire_attribut($logo_mini, 'src'); |
|
| 649 | - $embarque_fichier = charger_filtre('embarque_fichier'); |
|
| 650 | - $logo_mini = $embarque_fichier($logo_mini); |
|
| 651 | - $logo_bg = timestamp($logo_bg); |
|
| 652 | - $styles .= ".page_login, .page_spip_pass {background-image:url($logo_bg), url($logo_mini);}\n"; |
|
| 653 | - $Pile[0]['body_class'] = 'fond_image'; |
|
| 654 | - } |
|
| 655 | - else { |
|
| 656 | - $Pile[0]['body_class'] = 'sans_fond'; |
|
| 657 | - } |
|
| 658 | - if ($styles) { |
|
| 659 | - $styles = "<style type='text/css'>$styles</style>"; |
|
| 660 | - } |
|
| 661 | - return $styles; |
|
| 636 | + $styles = ''; |
|
| 637 | + include_spip('inc/config'); |
|
| 638 | + if ($couleur = lire_config('couleur_login')) { |
|
| 639 | + include_spip('inc/filtres_images_mini'); |
|
| 640 | + $hs = couleur_hex_to_hsl($couleur, 'h, s'); |
|
| 641 | + $l = couleur_hex_to_hsl($couleur, 'l'); |
|
| 642 | + $styles .= ":root {--spip-login-color-theme--hs: {$hs};--spip-login-color-theme--l: {$l};}\n"; |
|
| 643 | + } |
|
| 644 | + $logo_bg = _DIR_IMG . 'spip_fond_login.jpg'; |
|
| 645 | + if (file_exists($logo_bg)) { |
|
| 646 | + include_spip('inc/filtres_images_mini'); |
|
| 647 | + $logo_mini = image_reduire($logo_bg, 64, 64); |
|
| 648 | + $logo_mini = extraire_attribut($logo_mini, 'src'); |
|
| 649 | + $embarque_fichier = charger_filtre('embarque_fichier'); |
|
| 650 | + $logo_mini = $embarque_fichier($logo_mini); |
|
| 651 | + $logo_bg = timestamp($logo_bg); |
|
| 652 | + $styles .= ".page_login, .page_spip_pass {background-image:url($logo_bg), url($logo_mini);}\n"; |
|
| 653 | + $Pile[0]['body_class'] = 'fond_image'; |
|
| 654 | + } |
|
| 655 | + else { |
|
| 656 | + $Pile[0]['body_class'] = 'sans_fond'; |
|
| 657 | + } |
|
| 658 | + if ($styles) { |
|
| 659 | + $styles = "<style type='text/css'>$styles</style>"; |
|
| 660 | + } |
|
| 661 | + return $styles; |
|
| 662 | 662 | } |