[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / inc / minipres.php
index 63249d5..29ac113 100644 (file)
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Présentation des pages d'installation et d'erreurs
+ *
+ * @package SPIP\Core\Minipres
+ **/
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 include_spip('inc/headers');
 include_spip('inc/texte'); //inclue inc/lang et inc/filtres
 
-//
-// Presentation des pages d'installation et d'erreurs
-//
 
 /**
- * http://doc.spip.org/@install_debut_html
+ * Retourne le début d'une page HTML minimale (de type installation ou erreur)
+ *
+ * Le contenu de CSS minimales (reset.css, clear.css, minipres.css) est inséré
+ * dans une balise script inline (compactée si possible)
+ *
+ * @uses utiliser_langue_visiteur()
+ * @uses http_no_cache()
+ * @uses html_lang_attributes()
+ * @uses compacte() si le plugin compresseur est présent
+ * @uses url_absolue_css()
  *
  * @param string $titre
+ *    Titre. `AUTO`, indique que l'on est dans le processus d'installation de SPIP
  * @param string $onLoad
+ *    Attributs pour la balise `<body>`
  * @param bool $all_inline
- *   inliner les css et js dans la page (limiter le nombre de hits)
+ *    Inliner les css et js dans la page (limiter le nombre de hits)
  * @return string
+ *    Code HTML
  */
 function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) {
-       global $spip_lang_right,$spip_lang_left;
-       
+
        utiliser_langue_visiteur();
 
        http_no_cache();
 
-       if ($titre=='AUTO')
-               $titre=_T('info_installation_systeme_publication');
+       if ($titre == 'AUTO') {
+               $titre = _T('info_installation_systeme_publication');
+       }
 
        # le charset est en utf-8, pour recuperer le nom comme il faut
        # lors de l'installation
-       if (!headers_sent())
+       if (!headers_sent()) {
                header('Content-Type: text/html; charset=utf-8');
+       }
 
        $css = "";
-       $files = array('reset.css','clear.css','minipres.css');
-       if ($all_inline){
+       $files = array('reset.css', 'clear.css', 'minipres.css');
+       if ($all_inline) {
                // inliner les CSS (optimisation de la page minipres qui passe en un seul hit a la demande)
-               foreach ($files as $name){
+               foreach ($files as $name) {
                        $file = direction_css(find_in_theme($name));
-                       if (function_exists("compacte"))
+                       if (function_exists("compacte")) {
                                $file = compacte($file);
-                       else
+                       } else {
                                $file = url_absolue_css($file); // precaution
-                       lire_fichier($file,$c);
+                       }
+                       lire_fichier($file, $c);
                        $css .= $c;
                }
-               $css = "<style type='text/css'>".$css."</style>";
-       }
-       else{
-               foreach ($files as $name){
+               $css = "<style type='text/css'>" . $css . "</style>";
+       } else {
+               foreach ($files as $name) {
                        $file = direction_css(find_in_theme($name));
                        $css .= "<link rel='stylesheet' href='$file' type='text/css' />\n";
                }
        }
 
        // au cas ou minipres() est appele avant spip_initialisation_suite()
-       if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE', '');
-       return  _DOCTYPE_ECRIRE.
-               html_lang_attributes().
-               "<head>\n".
-               "<title>".
-               textebrut($titre).
-               "</title>\n".
-               "<meta name='viewport' content='width=device-width' />\n".
-               $css .
-"</head>
-<body".$onLoad." class='minipres'>
+       if (!defined('_DOCTYPE_ECRIRE')) {
+               define('_DOCTYPE_ECRIRE', '');
+       }
+
+       return _DOCTYPE_ECRIRE .
+       html_lang_attributes() .
+       "<head>\n" .
+       "<title>" .
+       textebrut($titre) .
+       "</title>\n" .
+       "<meta name='viewport' content='width=device-width' />\n" .
+       $css .
+       "</head>
+<body" . $onLoad . " class='minipres'>
        <div id='minipres'>
-       <h1>".
-         $titre .
-         "</h1>
+       <h1>" .
+       $titre .
+       "</h1>
        <div>\n";
 }
 
-// http://doc.spip.org/@install_fin_html
+/**
+ * Retourne la fin d'une page HTML minimale (de type installation ou erreur)
+ *
+ * @return string Code HTML
+ */
 function install_fin_html() {
        return "\n\t</div>\n\t</div>\n</body>\n</html>";
 }
 
 
 /**
- * http://doc.spip.org/@minipres
+ * Retourne une page HTML contenant, dans une présentation minimale,
+ * le contenu transmis dans `$titre` et `$corps`.
+ *
+ * Appelée pour afficher un message d’erreur (l’utilisateur n’a pas
+ * accès à cette page par exemple).
+ *
+ * Lorsqu’aucun argument n’est transmis, un header 403 est renvoyé,
+ * ainsi qu’un message indiquant une interdiction d’accès.
+ *
+ * @example
+ *   ```
+ *   include_spip('inc/minipres');
+ *   if (!autoriser('configurer')) {
+ *      echo minipres();
+ *      exit;
+ *   }
+ *   ```
+ * @uses install_debut_html()
+ * @uses install_fin_html()
  *
  * @param string $titre
- *   titre de la page
+ *   Titre de la page
  * @param string $corps
- *   corps de la page
- * @param string $onload
- *   attribut onload de <body>
- * @param bool $all_inline
- *   inliner les css et js dans la page (limiter le nombre de hits)
+ *   Corps de la page
+ * @param array $options
+ *   string onload : Attribut onload de `<body>`
+ *   bool all_inline : Inliner les css et js dans la page (limiter le nombre de hits)
+ *   int status : status de la page
  * @return string
+ *   HTML de la page
  */
-function minipres($titre='', $corps="", $onload='', $all_inline = false)
-{
-       if (!defined('_AJAX')) define('_AJAX', false); // par securite
+function minipres($titre = '', $corps = "", $options = array()) {
+
+       // compat signature old
+       // minipres($titre='', $corps="", $onload='', $all_inline = false)
+       $args = func_get_args();
+       if (isset($args[2]) and is_string($args[2])) {
+               $options = array('onload' => $args[2]);
+       }
+       if (isset($args[3])) {
+               $options['all_inline'] = $args[3];
+       }
+
+       $options = array_merge(array(
+               'onload' => '',
+               'all_inline' => false,
+       ), $options);
+
+       if (!defined('_AJAX')) {
+               define('_AJAX', false);
+       } // par securite
        if (!$titre) {
-               if (!_AJAX)
-                       http_status(403);
+               if (!isset($options['status'])) {
+                       $options['status'] = 403;
+               }
                if (!$titre = _request('action')
-               AND !$titre = _request('exec')
-               AND !$titre = _request('page'))
+                       and !$titre = _request('exec')
+                       and !$titre = _request('page')
+               ) {
                        $titre = '?';
+               }
 
                $titre = spip_htmlspecialchars($titre);
 
                $titre = ($titre == 'install')
-                  _T('avis_espace_interdit')
-                 : $titre . '&nbsp;: '. _T('info_acces_interdit');
+                       ? _T('avis_espace_interdit')
+                       : $titre . '&nbsp;: ' . _T('info_acces_interdit');
 
                $statut = isset($GLOBALS['visiteur_session']['statut']) ? $GLOBALS['visiteur_session']['statut'] : '';
-               $nom    = isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : '';
+               $nom = isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : '';
 
                if ($statut != '0minirezo') {
                        $titre = _T('info_acces_interdit');
                }
 
-               $corps = generer_form_ecrire('accueil', '','',
-                                               $statut ? _T('public:accueil_site') : _T('public:lien_connecter')
+               $corps = generer_form_ecrire('accueil', '', '',
+                       $statut ? _T('public:accueil_site') : _T('public:lien_connecter')
                );
                spip_log($nom . " $titre " . $_SERVER['REQUEST_URI']);
        }
 
-       if (!_AJAX)
-               return install_debut_html($titre, $onload, $all_inline)
+       if (!_AJAX) {
+               if (isset($options['status'])) {
+                       http_status($options['status']);
+               }
+
+               return install_debut_html($titre, $options['onload'], $options['all_inline'])
                . $corps
                . install_fin_html();
-       else {
+       else {
                include_spip('inc/headers');
                include_spip('inc/actions');
-               $url = self('&',true);
-               foreach ($_POST as $v => $c)
+               $url = self('&', true);
+               foreach ($_POST as $v => $c) {
                        $url = parametre_url($url, $v, $c, '&');
-               ajax_retour("<div>".$titre . redirige_formulaire($url)."</div>",false);
+               }
+               ajax_retour("<div>" . $titre . redirige_formulaire($url) . "</div>", false);
        }
 }
-?>