Valider 99dc0028 rédigé par Eric Lupinacci's avatar Eric Lupinacci
Parcourir les fichiers

Ajout d'une option de rechargement des pages pour ne charger qu'une seule page...

Ajout d'une option de rechargement des pages pour ne charger qu'une seule page quand on sait qu'elle a été modifiée.
Suppression d'un script js devenu inutile.
parent 5b5b8779
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+8 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -10,17 +10,19 @@ if (!defined('_ECRIRE_INC_VERSION')) return;

/**
 * Cette action permet à l'utilisateur de recharger en base de données, de façon sécurisée,
 * l'ensemble des pages à partir de leur fichier XML ou YAML.
 * une page ou l'ensemble des pages à partir de leur fichier XML ou YAML.
 *
 * Cette action est réservée aux utilisateurs pouvant utiliser le noiZetier.
 * Elle ne nécessite aucun argument.
 * Elle ne nécessite l'identifiant de la page ou vide si on veut recharger toutes les pages.
 *
 * @return void
 */
function action_recharger_pages_dist() {

	// Sécurisation.
	// -- Aucun argument attendu.
	// Securisation et autorisation.
	// L'argument attendu est la page à recharger ou sinon vide pour toutes les pages.
	$securiser_action = charger_fonction('securiser_action', 'inc');
	$page = $securiser_action();

	// Vérification des autorisations : pour recharger les pages ou les noisettes il suffit
	// d'avoir l'autorisation minimale d'accéder au noizetier.
@@ -30,7 +32,7 @@ function action_recharger_pages_dist() {
		exit();
	}

	// Rechargement des pages : on force le recalcul complet, c'est le but.
	// Rechargement des pages ou de la page : on force le recalcul complet, c'est le but.
	include_spip('inc/noizetier_page');
	page_noizetier_charger(true);
	page_noizetier_charger(true, $page);
}
+55 −27
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -14,10 +14,11 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 * @api
 *
 * @param bool   $recharger
 * @param string $page_a_charger
 *
 * @return bool
 */
function page_noizetier_charger($recharger = false) {
function page_noizetier_charger($recharger = false, $page_a_charger = '') {

	// Retour de la fonction
	$retour = false;
@@ -32,27 +33,31 @@ function page_noizetier_charger($recharger = false) {
	// Initialiser le contexte de rechargement
	$forcer_chargement = $recharger;

	// Initialiser la table et le where des pages non virtuelles qui sont utilisés plusieurs fois.
	$from ='spip_noizetier_pages';
	$where = array('est_virtuelle=' . sql_quote('non'));
	// Seules les pages explicites sont concernées.
	$filtres = array('est_virtuelle' => 'non');
	if ($page_a_charger) {
		// On limite la recherche à la page demandée
		$filtres['page'] = $page_a_charger;
	}

	// Déterminer le ou les fichiers HTML correspondant auxpages ou à la page à recharger
	$fichiers = $page_a_charger
		? array(find_in_path("{$options['repertoire_pages']}${page_a_charger}.html"))
		: find_all_in_path($options['repertoire_pages'], '.+[.]html$');

	// On recherche les pages et les compositions explicites par le fichier HTML en premier
	// Si on le trouve, on récupère la configuration du fichier XML ou YAML.
	if ($fichiers = find_all_in_path($options['repertoire_pages'], '.+[.]html$')) {
		$pages_nouvelles = $pages_modifiees = $pages_obsoletes = array();
	if ($fichiers) {
		// Récupération pour les divers traitements qui suivent:
		// - des signatures md5 des pages déjà enregistrées pour déterminer si les fichiers YAML/XML
		//   ont subi des changements.
		// - des blocs exclus qui sont éditables après chargement, il faut donc conserver les modifications éventuelles.
		// - des plugins nécessités et des indicateurs d'activité (voir fin de traitement).
		$trouver_table = charger_fonction('trouver_table', 'base');
		$table = $trouver_table($from);
		$select = array_diff(array_keys($table['field']), array('maj'));
		$pages_nouvelles = $pages_modifiees = $pages_obsoletes = array();
		$signatures = array();
		if ($pages_existantes = sql_allfetsel($select, $from, $where)) {
			// On construit le tableau des pages déjà enregistrée en base indexé par identifiant de page.
			$pages_existantes = array_column($pages_existantes, null, 'page');

		// On construit le tableau des pages déjà enregistrées en base indexé par identifiant de page.
		if ($pages_existantes = page_noizetier_repertorier(array(), $filtres)) {
			// Si on force le rechargement il est inutile de gérer les signatures, les indicateurs d'activité
			// et les pages modifiées ou obsolètes.
			if (!$forcer_chargement) {
@@ -62,8 +67,8 @@ function page_noizetier_charger($recharger = false) {
			}
		}

		foreach ($fichiers as $_squelette => $_chemin) {
			$page = basename($_squelette, '.html');
		foreach ($fichiers as $_chemin) {
			$page = basename($_chemin, '.html');
			$dossier = dirname($_chemin);
			$est_composition = (page_noizetier_extraire_composition($page) != '');
			// Exclure certaines pages :
@@ -152,6 +157,9 @@ function page_noizetier_charger($recharger = false) {
		}

		// Mise à jour de la table des pages
		// -- Initialiser la table
		$from ='spip_noizetier_pages';

		// -- Suppression des pages obsolètes ou de toute les pages non virtuelles si on est en mode
		//    rechargement forcé.
		if (sql_preferer_transaction()) {
@@ -160,6 +168,8 @@ function page_noizetier_charger($recharger = false) {
		if ($pages_obsoletes) {
			sql_delete($from, sql_in('page', $pages_obsoletes));
		} elseif ($forcer_chargement) {
			// -- Initialiser le where des pages non virtuelles
			$where = calculer_condition_par_filtre($filtres);
			sql_delete($from, $where);
		}
		// -- Update des pages modifiées
@@ -329,18 +339,7 @@ function page_noizetier_repertorier($information = array(), $filtres = array(),

	if ($information_valide) {
		// On calcule le where à partir des filtres sachant que tous les champs sont des chaines.
		$where = array();
		if ($filtres) {
			foreach ($filtres as $_champ => $_critere) {
				$operateur = '=';
				$valeur = $_critere;
				if (substr($_critere, 0, 1) == '!') {
					$operateur = '!=';
					$valeur = ltrim($_critere, '!');
				}
				$where[] = $_champ . $operateur . sql_quote($valeur);
			}
		}
		$where = calculer_condition_par_filtre($filtres);

		// Chargement des pages et compositions.
		$pages = sql_allfetsel($select, 'spip_noizetier_pages', $where);
@@ -705,3 +704,32 @@ function phraser_fichier_descriptif_page($page, $options = array()) {

	return $description;
}


/**
 * Construit le tableau des conditions au format compatible avec l'API SQL à partir du tableau des filtres
 * au format [critère] = valeur.
 *
 * @param array   $filtres
 *        Tableau associatif `[champ] = valeur` de critères de filtres sur les descriptions de types de noisette.
 *        Les opérateurs binaires possibles sont l'égalité et l'inégalité en préfixant la valeur par le caractère `!``
 *
 * @return array
 */
function calculer_condition_par_filtre($filtres = array()) {

	$where = array();
	if ($filtres) {
		foreach ($filtres as $_champ => $_critere) {
			$operateur = '=';
			$valeur = $_critere;
			if (substr($_critere, 0, 1) == '!') {
				$operateur = '!=';
				$valeur = ltrim($_critere, '!');
			}
			$where[] = $_champ . $operateur . sql_quote($valeur);
		}
	}

	return $where;
}
+4 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -448,6 +448,10 @@ function noizetier_insert_head($flux) {
 * Modifier le tableau retourné par la fonction traiter ou effectuer des traitements supplémentaires.
 *
 * - Édition de la composition d'un objet : recharger le bloc des noisettes en ajax
 *
 * @param array $flux
 *
 * @return array
 */
function noizetier_formulaire_traiter($flux) {
	if (
+0 −18
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -75,21 +75,3 @@
</BOUCLE_pages>
</ul>
</B_pages>

[(#REM) Affichage ou effacement des boutons d'actions de chaque page ]
<script type="text/javascript">
/*<!\[CDATA\[*/
	// $(function(){
	// 	$('.item.page .edition').hide();
	// 	$('.item.page')
	// 		.hover(
	// 			function(){
	// 				$(this).find('.edition').show();
	// 			},
	// 			function(){
	// 				$(this).find('.edition').hide();
	// 			}
	// 		);
	// });
/*\]\]>*/
</script>
 No newline at end of file
+1 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,9 +12,8 @@
		|et{#ENV{id_objet}|non}
		|oui)
		[(#SET{libelle, #ENV{composition}|?{<:noizetier:recharger_composition:>, <:noizetier:recharger_page:>}})]
		<!-- TODO : voir comment ne recharger que la page concernée -->
		[(#REM) <!-- Inutile d'utiliser l'autorisation noizetier car l'autorisation de cette page l'inclut déjà	-->]
		[(#URL_ACTION_AUTEUR{recharger_pages, '', #SELF}
		[(#URL_ACTION_AUTEUR{recharger_pages, #ENV{page}, #SELF}
			|bouton_action_horizontal{#GET{libelle}, page-maj-24, '', #LANG_LEFT})]
	]