112 lines
3.4 KiB
PHP
112 lines
3.4 KiB
PHP
|
<?php
|
|||
|
|
|||
|
/***************************************************************************\
|
|||
|
* SPIP, Systeme de publication pour l'internet *
|
|||
|
* *
|
|||
|
* Copyright (c) 2001-2019 *
|
|||
|
* 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. *
|
|||
|
\***************************************************************************/
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Ce fichier definit les boucles standard de SPIP
|
|||
|
*
|
|||
|
* @package SPIP\Core\Compilateur\Boucles
|
|||
|
**/
|
|||
|
|
|||
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Compile une boucle standard, sans condition rajoutée
|
|||
|
*
|
|||
|
* @param string $id_boucle
|
|||
|
* Identifiant de la boucle
|
|||
|
* @param array $boucles
|
|||
|
* AST du squelette
|
|||
|
* @return string
|
|||
|
* Code PHP compilé de la boucle
|
|||
|
**/
|
|||
|
function boucle_DEFAUT_dist($id_boucle, &$boucles) {
|
|||
|
return calculer_boucle($id_boucle, $boucles);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Compile une boucle récursive
|
|||
|
*
|
|||
|
* `<BOUCLE(BOUCLE)>`
|
|||
|
*
|
|||
|
* @link http://www.spip.net/914
|
|||
|
*
|
|||
|
* @param string $id_boucle
|
|||
|
* Identifiant de la boucle
|
|||
|
* @param array $boucles
|
|||
|
* AST du squelette
|
|||
|
* @return string
|
|||
|
* Code PHP compilé de la boucle
|
|||
|
**/
|
|||
|
function boucle_BOUCLE_dist($id_boucle, &$boucles) {
|
|||
|
return calculer_boucle($id_boucle, $boucles);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Compile une boucle HIERARCHIE
|
|||
|
*
|
|||
|
* La boucle `<BOUCLE(HIERARCHIE)>` retourne la liste des RUBRIQUES
|
|||
|
* qui mènent de la racine du site à la rubrique ou à l’article en cours.
|
|||
|
*
|
|||
|
* Cette boucle (aliasée sur la table RUBRIQUES)
|
|||
|
*
|
|||
|
* - recherche un id_rubrique dans les boucles parentes,
|
|||
|
* - extrait sa hiérarchie, en prenant ou non la rubrique en cours en fonction du critère {tout}
|
|||
|
* - crée une condition WHERE avec ces identifiants ansi qu'une clause ORDER
|
|||
|
* - compile la boucle.
|
|||
|
*
|
|||
|
* Le code compilé calculant la hierarchie est ajouté au tout début de la
|
|||
|
* fonction de boucle et quitte la boucle si aucune rubrique n'est trouvée.
|
|||
|
*
|
|||
|
* @link http://www.spip.net/913
|
|||
|
*
|
|||
|
* @param string $id_boucle
|
|||
|
* Identifiant de la boucle
|
|||
|
* @param array $boucles
|
|||
|
* AST du squelette
|
|||
|
* @return string
|
|||
|
* Code PHP compilé de la boucle
|
|||
|
**/
|
|||
|
function boucle_HIERARCHIE_dist($id_boucle, &$boucles) {
|
|||
|
$boucle = &$boucles[$id_boucle];
|
|||
|
$id_table = $boucle->id_table . ".id_rubrique";
|
|||
|
|
|||
|
// Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille
|
|||
|
// sauf en presence du critere {tout} (vu par phraser_html)
|
|||
|
// ou {id_article} qui positionne aussi le {tout}
|
|||
|
|
|||
|
$boucle->hierarchie = 'if (!($id_rubrique = intval('
|
|||
|
. calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles)
|
|||
|
. ")))\n\t\treturn '';\n\t"
|
|||
|
. "include_spip('inc/rubriques');\n\t"
|
|||
|
. '$hierarchie = calcul_hierarchie_in($id_rubrique,'
|
|||
|
. (isset($boucle->modificateur['tout']) ? 'true' : 'false')
|
|||
|
. ");\n\t"
|
|||
|
. 'if (!$hierarchie) return "";' . "\n\t";
|
|||
|
|
|||
|
$boucle->where[] = array("'IN'", "'$id_table'", '"($hierarchie)"');
|
|||
|
|
|||
|
$order = "FIELD($id_table, \$hierarchie)";
|
|||
|
if (!isset($boucle->default_order[0]) or $boucle->default_order[0] != " DESC") {
|
|||
|
$boucle->default_order[] = "\"$order\"";
|
|||
|
} else {
|
|||
|
$boucle->default_order[0] = "\"$order DESC\"";
|
|||
|
}
|
|||
|
|
|||
|
return calculer_boucle($id_boucle, $boucles);
|
|||
|
}
|