[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / inc / presentation_mini.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2017 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Fonctions d'affichage pour l'espace privé (hors squelettes)
15 *
16 * @package SPIP\Core\Affichage
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) {
19 return;
20 }
21
22 /**
23 * Affiche un code html (echo) et log l'affichage car cet echo est anormal !
24 *
25 * Signale une fonction qui devrait retourner un contenu mais effectue
26 * un echo à la place pour compatibilité ascendante
27 *
28 * @deprecated
29 * Utiliser des squelettes pour l'affichage !
30 *
31 * @param string $f
32 * Nom de la fonction
33 * @param string $ret
34 * Code HTML à afficher
35 * @return void
36 **/
37 function echo_log($f, $ret) {
38 spip_log("Page " . self() . " function $f: echo " . substr($ret, 0, 50) . "...", 'echo');
39 echo(_SIGNALER_ECHOS ? "#Echo par $f#" : "") . $ret;
40 }
41
42 /**
43 * Retourne le code HTML d'un début de cadre pour le centre de page (haut de page)
44 *
45 * @return string Code HTML
46 */
47 function debut_grand_cadre() { return "\n<div class = 'table_page'>\n"; }
48
49 /**
50 * Retourne le code HTML d'une fin de cadre pour le centre de page (haut de page)
51 *
52 * @return string Code HTML
53 */
54 function fin_grand_cadre() { return "\n</div>"; }
55
56 // Debut de la colonne de gauche
57 // div navigation fermee par creer_colonne_droite qui ouvre
58 // div extra lui-meme ferme par debut_droite qui ouvre
59 // div contenu lui-meme ferme par fin_gauche() ainsi que
60 // div conteneur
61
62 /**
63 * Retourne le code HTML du début de la colonne gauche
64 *
65 * @return string Code HTML
66 */
67 function debut_gauche() {
68 return "<div id = 'conteneur' class = ''>\n<div id = 'navigation' class = 'lat' role = 'contentinfo'>\n";
69 }
70
71 /**
72 * Retourne le code HTML de la fin de la colonne
73 *
74 * @return string Code HTML
75 */
76 function fin_gauche() { return "</div></div><br class = 'nettoyeur' />"; }
77
78 /**
79 * Retourne le code HTML du changement de colonne (passer de la gauche à la droite)
80 *
81 * @return string Code HTML
82 */
83 function creer_colonne_droite() {
84 static $deja_colonne_droite;
85 if ($GLOBALS['spip_ecran'] != 'large' or $deja_colonne_droite) {
86 return '';
87 }
88 $deja_colonne_droite = true;
89
90 return "\n</div><div id='extra' class='lat' role='complementary'>";
91 }
92
93 /**
94 * Retourne le code HTML de la colonne droite et du centre de page
95 *
96 * @return string Code HTML
97 */
98 function debut_droite() {
99 return liste_objets_bloques(_request('exec'))
100 . creer_colonne_droite()
101 . "</div>"
102 . "\n<div id='contenu'>";
103 }
104
105 /**
106 * Retourne la liste des objets édités récemment (si les drapeaux d'édition sont actifs)
107 *
108 * Si notre page est une page d'édition d'un objet, on déclare au passage l'auteur
109 * comme éditant l'objet
110 *
111 * @uses signale_edition()
112 * @uses liste_drapeau_edition()
113 *
114 * @param string $exec
115 * Nom de la page exec en cours
116 * @param array $contexte
117 * Contexte de la page
118 * @param array|null $auteur
119 * Session de l'auteur. Sera prise sur l'auteur connecté si non indiquée.
120 * @return string
121 * Code HTML
122 **/
123 function liste_objets_bloques($exec, $contexte = array(), $auteur = null) {
124 $res = '';
125 if ($GLOBALS['meta']["articles_modif"] != "non") {
126 include_spip('inc/drapeau_edition');
127 if (is_null($auteur)) {
128 $auteur = $GLOBALS['visiteur_session'];
129 }
130 if ($en_cours = trouver_objet_exec($exec)
131 and $en_cours['edition']
132 and $type = $en_cours['type']
133 and ((isset($contexte[$en_cours['id_table_objet']]) and $id = $contexte[$en_cours['id_table_objet']])
134 or $id = _request($en_cours['id_table_objet']))
135 ) {
136 // marquer le fait que l'objet est ouvert en edition par toto
137 // a telle date ; une alerte sera donnee aux autres redacteurs
138 signale_edition($id, $auteur, $type);
139 }
140
141 $objets_ouverts = liste_drapeau_edition($auteur['id_auteur']);
142 if (count($objets_ouverts)) {
143 $res .= recuperer_fond('prive/objets/liste/objets-en-edition', array(), array('ajax' => true));
144 }
145 }
146
147 return $res;
148 }
149
150
151 /**
152 * Retourne le code HTML de fin de page de l'interface privée.
153 *
154 * Elle génère au passage un appel pour déclencher les tâches cron
155 *
156 * @see f_queue() Pour l'appel au cron
157 *
158 * @return string Code HTML
159 **/
160 function fin_page() {
161 include_spip('inc/pipelines');
162 // avec &var_profile=1 on a le tableau de mesures SQL
163 $debug = ((_request('exec') !== 'valider_xml')
164 and ((_request('var_mode') == 'debug')
165 or (isset($GLOBALS['tableau_des_temps']) and $GLOBALS['tableau_des_temps'])
166 and isset($_COOKIE['spip_admin'])));
167 $t = '</div><div id="pied"><div class="largeur">'
168 . recuperer_fond('prive/squelettes/inclure/pied')
169 . "</div>"
170 . "</div></div>" // cf. div#page et div.largeur ouvertes dans conmmencer_page()
171 . ($debug ? erreur_squelette() : '')
172 . "</body></html>\n";
173
174 return f_queue($t);
175 }
176
177 /**
178 * Retourne des tests javascript à exécuter
179 *
180 * - Teste que javascript est actif : si non, un hit sur exec=test_ajax est généré
181 * - Rejoue la session si demandé (par verifier_session() si l'ip a changé)
182 *
183 * @see exec_test_ajax_dist()
184 * @see verifier_session()
185 *
186 * @return string Code HTML
187 **/
188 function html_tests_js() {
189 if (_SPIP_AJAX and !defined('_TESTER_NOSCRIPT')) {
190 // pour le pied de page (deja defini si on est validation XML)
191 define('_TESTER_NOSCRIPT',
192 "<noscript>\n<div style='display:none;'><img src='"
193 . generer_url_ecrire('test_ajax', 'js=-1')
194 . "' width='1' height='1' alt='' /></div></noscript>\n");
195 }
196
197 $rejouer = '';
198 if (defined('_SESSION_REJOUER')) {
199 $rejouer = (_SESSION_REJOUER === true) ? rejouer_session() : _SESSION_REJOUER;
200 }
201
202 return $rejouer . (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : '');
203 }
204
205 /**
206 * Retourne la liste des mises à jour de SPIP possibles
207 *
208 * @return string Texte présentant la liste des mises à jour existantes
209 **/
210 function info_maj_spip() {
211
212 $maj = isset($GLOBALS['meta']['info_maj_spip']) ? $GLOBALS['meta']['info_maj_spip'] : null;
213 if (!$maj) {
214 return "";
215 }
216
217 $maj = explode('|', $maj);
218 // c'est une ancienne notif, on a fait la maj depuis !
219 if ($GLOBALS['spip_version_branche'] !== reset($maj)) {
220 return "";
221 }
222
223 if (!autoriser('webmestre')) {
224 return "";
225 }
226
227 array_shift($maj);
228 $maj = implode('|', $maj);
229
230 return "$maj<br />";
231 }
232
233 /**
234 * Retourne les informations de copyright (version de SPIP, de l'écran de sécurité)
235 * pour le pied de page de l'espace privé
236 *
237 * @return string Code HTML
238 **/
239 function info_copyright() {
240
241 $version = $GLOBALS['spip_version_affichee'];
242
243 //
244 // Mention, le cas echeant, de la revision SVN courante
245 //
246 if ($svn_revision = version_svn_courante(_DIR_RACINE)) {
247 $version .= ' ' . (($svn_revision < 0) ? 'SVN ' : '')
248 . "[<a href='http://core.spip.net/projects/spip/repository/revisions/"
249 . abs($svn_revision) . "' target=\"_blank\" rel=\"noopener noreferrer\">"
250 . abs($svn_revision) . "</a>]";
251 }
252
253 // et la version de l'ecran de securite
254 $secu = defined('_ECRAN_SECURITE')
255 ? "<br />" . _T('ecran_securite', array('version' => _ECRAN_SECURITE))
256 : '';
257
258 return _T('info_copyright',
259 array(
260 'spip' => "<b>SPIP $version</b> ",
261 'lien_gpl' =>
262 "<a href='" . generer_url_ecrire("aide",
263 "aide=licence&var_lang=" . $GLOBALS['spip_lang']) . "' class=\"aide popin\">" . _T('info_copyright_gpl') . "</a>"
264 ))
265 . $secu;
266
267 }
268
269 /**
270 * Retourne un formulaire de recherche pour l'espace privé
271 *
272 * Préférez l'usage en squelettes via la balise `#FORMULAIRE_RECHERCHE_ECRIRE`.
273 *
274 * @see formulaires_recherche_ecrire_charger_dist()
275 *
276 * @param string $page Nom de la page exec
277 * @param string $complement Code HTML supplémentaire
278 * @return string Code HTML
279 **/
280 function formulaire_recherche($page, $complement = "") {
281 $recherche = _request('recherche');
282 $recherche_aff = entites_html($recherche);
283 if (!strlen($recherche)) {
284 $recherche_aff = _T('info_rechercher');
285 $onfocus = " onfocus=\"this.value='';\"";
286 } else {
287 $onfocus = '';
288 }
289
290 $form = '<input type="text" size="10" value="' . $recherche_aff . '" name="recherche" class="recherche" accesskey="r"' . $onfocus . ' />';
291 $form .= "<input type='image' src='" . chemin_image('rechercher-20.png') . "' name='submit' class='submit' alt='" . _T('info_rechercher') . "' />";
292
293 return "<div class='spip_recherche'>" . generer_form_ecrire($page, $form . $complement, " method='get'") . "</div>";
294 }