Valider 4191b06c rédigé par cerdic's avatar cerdic
Parcourir les fichiers

refactor: une classe Spip\Afficher\Minipres symétrique de Minipublic qui repose sur cette dernière.

+ brancher le vieux minipres() dessus (qui devient deprecated)
parent 5b9ae7da
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+18 −136
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -18,21 +18,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

include_spip('inc/headers');
include_spip('inc/texte'); //inclue inc/lang et inc/filtres


/**
 * 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 minifier() si le plugin compresseur est présent
 * @uses url_absolue_css()
 * @deprecated
 *
 * @param string $titre
 *    Titre. `AUTO`, indique que l'on est dans le processus d'installation de SPIP
@@ -45,78 +33,37 @@ include_spip('inc/texte'); //inclue inc/lang et inc/filtres
 */
function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) {

	utiliser_langue_visiteur();

	http_no_cache();

	if ($titre == 'AUTO') {
		$titre = _T('info_installation_systeme_publication');
	if ($onLoad) {
		include_spip('inc/filtres');
		$onLoad = extraire_attribut("<body $onLoad>", "onload");
	}

	# le charset est en utf-8, pour recuperer le nom comme il faut
	# lors de l'installation
	if (!headers_sent()) {
		header('Content-Type: text/html; charset=utf-8');
	}
	$options = [
		'all_inline' => $all_inline,
		'onload' => $onLoad,
		'titre' => $titre,
	];

	$css = '';
	$files = ['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) {
			$file = direction_css(find_in_theme($name));
			if (function_exists('minifier')) {
				$file = minifier($file);
			} else {
				$file = url_absolue_css($file); // precaution
			}
			lire_fichier($file, $c);
			$css .= $c;
		}
		$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'>
	<div id='minipres'>
	<h1>" .
	$titre .
	"</h1>
	<div>\n";
	$minipres = new Spip\Afficher\Minipres();
	return $minipres->installDebutPage($options);
}

/**
 * Retourne la fin d'une page HTML minimale (de type installation ou erreur)
 * @deprecated
 *
 * @return string Code HTML
 */
function install_fin_html() {
	return "\n\t</div>\n\t</div>\n</body>\n</html>";
	$minipres = new Spip\Afficher\Minipres();
	return $minipres->installFinPage();
}


/**
 * Retourne une page HTML contenant, dans une présentation minimale,
 * le contenu transmis dans `$titre` et `$corps`.
 *
 * @deprecated
 * Appelée pour afficher un message d’erreur (l’utilisateur n’a pas
 * accès à cette page par exemple).
 *
@@ -162,73 +109,8 @@ function minipres($titre = '', $corps = '', $options = []) {
		'all_inline' => false,
	], $options);

	if (!defined('_AJAX')) {
		define('_AJAX', false);
	} // par securite
	if (!$titre) {
		if (!isset($options['status'])) {
			$options['status'] = 403;
		}
		if (
			!$titre = _request('action')
			and !$titre = _request('exec')
			and !$titre = _request('page')
		) {
			$titre = '?';
		}
	$options['titre'] = $titre;

		$titre = spip_htmlspecialchars($titre);

		$titre = ($titre == 'install')
			? _T('avis_espace_interdit')
			: $titre . '&nbsp;: ' . _T('info_acces_interdit');

		$statut = $GLOBALS['visiteur_session']['statut'] ?? '';
		$nom = $GLOBALS['visiteur_session']['nom'] ?? '';

		if ($statut != '0minirezo') {
			$titre = _T('info_acces_interdit');
		}

		if ($statut and test_espace_prive()) {
			$corps = bouton_action(_T('public:accueil_site'), generer_url_ecrire('accueil'));
		}
		elseif (!empty($_COOKIE['spip_admin'])) {
			$corps = bouton_action(_T('public:lien_connecter'), generer_url_public('login'));
		}
		else {
			$corps = bouton_action(_T('public:accueil_site'), $GLOBALS['meta']['adresse_site']);
		}
		$corps = "<div class='boutons'>$corps</div>";
		spip_log($nom . " $titre " . $_SERVER['REQUEST_URI']);
	}

	if (!_AJAX) {
		if (isset($options['status'])) {
			http_response_code($options['status']);
		}

		$html = install_debut_html($titre, $options['onload'], $options['all_inline'])
				. $corps
				. install_fin_html();

		if (
			$GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
			and empty($options['all_inline'])
		) {
			define('_SET_HTML_BASE', true);
			include_spip('public/assembler');
			$GLOBALS['html'] = true;
			page_base_href($html);
		}
		return $html;
	} else {
		include_spip('inc/headers');
		include_spip('inc/actions');
		$url = self('&', true);
		foreach ($_POST as $v => $c) {
			$url = parametre_url($url, $v, $c, '&');
		}
		ajax_retour('<div>' . $titre . redirige_formulaire($url) . '</div>', false);
	}
	$minipres = new Spip\Afficher\Minipres();
	return $minipres->page($corps, $options);
}
+155 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

/***************************************************************************\
 *  SPIP, Système de publication pour l'internet                           *
 *                                                                         *
 *  Copyright © avec tendresse depuis 2001                                 *
 *  Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribué sous licence GNU/GPL.     *
 * \***************************************************************************/

namespace Spip\Afficher;


/**
 * Présentation des pages simplifiées publiques pour envoyer un message à un utilisateur
 *
 * @package SPIP\Afficher\Minipublic
 **/
class Minipres extends Minipublic {

	protected function setOptions(array $options) {
		$options['couleur_fond'] = '#aaa';
		$options['css_files'] = [
			find_in_theme('minipres.css')
		];

		if (!empty($options['titre']) and $options['titre'] === 'AUTO') {
			$options['titre'] = _T('info_installation_systeme_publication');
		}
		$options['page_title'] = ($options['titre'] ?? '');

		return $options;
	}


	/**
	 * Retourne le début d'une page HTML minimale (de type installation ou erreur)
	 *
	 * @param array $options
	 * @return string
	 *    Code HTML
	 */
	public function installDebutPage($options = []) {

		$options = $this->setOptions($options);
		return parent::ouvreBody($options)
			. parent::ouvreCorps($options);
	}

	/**
	 * Retourne le fin d'une page HTML minimale (de type installation ou erreur)
	 *
	 * @param array $options
	 * @return string
	 *    Code HTML
	 */
	public function installFinPage($options = []) {

		$options = $this->setOptions($options);
		return parent::fermeCorps($options)
			. parent::fermeBody();
	}


	/**
	 * Retourne une page HTML contenant, dans une présentation minimale,
	 * le contenu transmis dans `$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.
	 *
	 * @param string $corps
	 *   Corps de la page
	 * @param array $options
	 * @return string
	 *   HTML de la page
	 * @see  ouvreBody()
	 *   string $titre : Titre à l'affichage (différent de $page_title)
	 *   int $status : status de la page
	 *   string $footer : pied de la box en remplacement du bouton retour par défaut
	 * @uses ouvreBody()
	 * @uses fermeBody()
	 *
	 */
	public function page($corps = '', $options = []) {

		$footer = '';

		if (empty($options['titre'])) {
			if (empty($corps) and !isset($options['status'])) {
				$options['status'] = 403;
			}

			if (
				!$titre = _request('action')
				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');

			$statut = $GLOBALS['visiteur_session']['statut'] ?? '';
			$nom = $GLOBALS['visiteur_session']['nom'] ?? '';

			if ($statut != '0minirezo') {
				$titre = _T('info_acces_interdit');
			}

			if ($statut and test_espace_prive()) {
				$footer = bouton_action(_T('public:accueil_site'), generer_url_ecrire('accueil'));
			}
			elseif (!empty($_COOKIE['spip_admin'])) {
				$footer = bouton_action(_T('public:lien_connecter'), generer_url_public('login'));
			}
			else {
				$footer = bouton_action(_T('public:accueil_site'), $GLOBALS['meta']['adresse_site']);
			}

			$corps = "";
			spip_log($nom . " $titre " . $_SERVER['REQUEST_URI'], 'minipres');
		}

		$options['footer'] = $footer;
		$options['page_title'] = $titre;
		$options['titre'] = $titre;

		$options = $this->setOptions($options);

		$html = parent::page($corps, $options);

		if (!_AJAX) {
			return $html;
		} else {
			include_spip('inc/headers');
			include_spip('inc/actions');
			$url = self('&', true);
			foreach ($_POST as $v => $c) {
				$url = parametre_url($url, $v, $c, '&');
			}
			ajax_retour('<div>' . $titre . redirige_formulaire($url) . '</div>', false);
			return '';
		}
	}

}
+16 −38
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
/* Correction des styles par defaut
---------------------------------------------- */
html { font-size: 100%; } /* Cf.: http://pompage.net/pompe/definir-des-tailles-de-polices-en-CSS/ */
body { font: .75em/1.5em Verdana, Geneva, sans-serif; color: #222; }
*, *:before, *:after { box-sizing: border-box; }
input, textarea, select { font-size: 100%; font-family: inherit; }

h1 { margin: 0 auto 1.5em auto; font-size: 1.3em; font-weight: bold; color: #db1762; text-align: center; }
h2 { margin: 0 0 1.5em 0; font-size: 1.2em; font-weight: normal; }
h3 { margin: 0 auto 1.5em auto; font-size: 1em; font-weight: bold; }
p  { display: block; margin: 0 0 1.5em 0; }

img, .spip_logo { margin: 0; padding: 0; border: 0; }
strong, b { font-weight: bold; }
em, i { font-style: italic; }
small,.small { font-size: .9em; }
ul.spip { list-style: square; margin-bottom:1.5em;}
ul.spip ul { list-style: circle; }
ol.spip { list-style: decimal; margin-bottom:1.5em;}
ul.spip li, ol.spip li {margin-left:50px;}
ul.spip li li, ol.spip li li {margin-left:25px}


.minipublic-bloc {text-align: left}
.minipublic-bloc header h1 {display: none}

/* LAYOUT / Disposition a l'ecran
---------------------------------------------- */
html, body { height: 100%; }
#minipres { position: relative; margin: 0 auto; background: #fff repeat; }
.minipublic { position: relative; margin: 0 auto; }
.quitter_fenetre { position: absolute; right: 1.5em; top: 1.5em; }
.quitter_fenetre a { display: block; width: 1.5em; height: 1.5em; background: url(images/fermer-16.png) no-repeat right center; color: #fff; text-indent: -999em; }

@media (min-width: 640px) {
	body { display: flex; padding: 2em; flex-direction: column; justify-content: center; align-items: center; height: auto; min-height: 100%; }
	#minipres { margin: 6em auto; width: 580px;border: 1px solid #DB1762;border-radius: 8px;padding: 2em 2em 1.5em 2em;overflow: hidden;}
	#minipres h1 {margin-top: -2em;margin-left: -2em;margin-right: -2em;padding: 0.8em;font-size: 1.1em;color: white;background: #DB1762;}
.minipublic-bloc header {color: white;background: #DB1762;padding: 0.75em 2em;}
@media (min-width: 680px) {
	.minipublic-bloc { width: 650px;border: 2px solid #DB1762;}
	.minipublic-bloc .corps { padding: 1.5em 2em;overflow: hidden;}
	.minipublic-bloc header {padding: 0.75em 2em;}
	.minipublic-bloc h2 {font-size: 1.1em;color: white;margin: 0 !important;}
}
@media (max-width: 640px) {
@media (max-width: 680px) {
	body {padding: 1.5em;}
	#minipres {width: auto;max-width: 25em;background: transparent;}
	.minipublic-bloc {width: auto;max-width: 25em;min-width: 15em; background: transparent;border: 0}
	.minipublic-bloc header {padding: 0.75em 0;}
	#etapes, #infos_etapes {display: none;}
}

@media screen and (max-width:640px) and (orientation: landscape) {
@media screen and (max-width:680px) and (orientation: landscape) {
	body { -webkit-text-size-adjust: 70%; }
}


/* Formulaires
---------------------------------------------- */

@@ -83,6 +65,8 @@ input[type=radio],input[type=checkbox] {display: inline-block; margin-right: 0.7
.erreur_message { font-weight: bold; color: red; }
.reponse_formulaire.reponse_formulaire_ok {border: 2px solid #C6D880;font-weight: normal;padding: 0.8em;margin-bottom: 1.5em;color: #264409;background-color: #E6EFC2;}



/* Habillage (en vrac)
---------------------------------------------- */

@@ -114,12 +98,6 @@ input[type=radio],input[type=checkbox] {display: inline-block; margin-right: 0.7
#infos_etapes li.prochains .fond { background-color: #dbdbdb;background-image: url(images/degrade-etapes-clair-left.gif); }

/* installation des plugins */
.error,
.success,
.notice {border:2px solid; font-weight: normal;padding:0.8em;margin-bottom:1.5em;}
.success {color: #264409;border-color: #c6d880;background-color:#e6efc2;}
.error {color: #8a1f11;border-color: #fbc2c4;background-color:#fbe3e4;}
.notice {color: #514721;border-color: #ffd324;background-color:#fff6bf;}

.install-plugins {position:relative;margin-bottom: 0;}
.install-plugins.success + .install-plugins.success {margin-top: 0;border-top: 0;}