Skip to content
Extraits de code Groupes Projets
Valider 3cb6e3e4 rédigé par Fil's avatar Fil
Parcourir les fichiers

* Ecriture plus lisible des squelettes (pour debug)

* Code du compilo plus lisible par des humains normaux
* méthode de création de balises persos :
	function balise_TOTO ($p) {
		$_champ = champ_sql('toto', $p);
		$p->code = "fonction_truc($_champ)";
		return $p;
	}
parent 020faca1
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -26,10 +26,9 @@ function calculer_params($idb, &$boucles) {
$params2[]=$param;
$params = $params2;
$boucle->hierarchie = '
$hierarchie = calculer_hierarchie('
$boucle->hierarchie = '$hierarchie = calculer_hierarchie('
.calculer_argument_precedent($idb, 'id_rubrique', $boucles)
.", false);\n";
.', false);';
}
......
Ce diff est replié.
......@@ -14,6 +14,7 @@ include_ecrire("inc_texte.php3");
include_ecrire("inc_filtres.php3");
include_ecrire("inc_lang.php3");
include_ecrire("inc_documents.php3");
include_ecrire("inc_forum.php3");
include_local("inc-calcul_mysql3.php");
include_local("inc-calcul_html4.php");
......
......@@ -83,28 +83,32 @@ function index_pile($idb, $nom_champ, &$boucles) {
# on lui passe la main et elle est cense retourner le tableau ci-dessus
# (Essayer de renvoyer une suite vide, ca diminue les allocations a l'exec)
// cette fonction sert d'API pour demander le champ '$champ' dans la pile
function champ_sql($champ, $p) {
return index_pile($p->id_boucle, $champ, $p->boucles);
}
function calculer_champ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
// Preparer les parametres
$params = new ParamChamp;
$params->fonctions = $fonctions;
$params->nom_champ = $nom_champ;
$params->id_boucle = $id_boucle;
$params->boucles = $boucles;
$params->id_mere = $id_mere;
// regarder s'il existe une fonction perso pour #NOM
$f = 'perso_' . $nom_champ;
if (function_exists($f))
return $f($params);
// regarder s'il existe une fonction new style pour #NOM
$f = 'calculer_balise_' . $nom_champ;
if (function_exists($f))
return $f($params);
// regarder s'il existe une fonction old style pour #NOM
$p = new ParamChamp;
$p->fonctions = $fonctions;
$p->nom_champ = $nom_champ;
$p->id_boucle = $id_boucle;
$p->boucles = $boucles;
$p->id_mere = $id_mere;
// regarder s'il existe une fonction personnalisee balise_NOM()
$f = 'balise_' . $nom_champ;
if (function_exists($f) AND $p = $f($p))
return $p->retour();
// regarder s'il existe une fonction standard balise_NOM_dist()
$f = 'balise_' . $nom_champ . '_dist';
if (function_exists($f) AND $p = $f($p))
return $p->retour();
# A SUPPRIMER
// regarder s'il existe une fonction old style calculer_champ_NOM()
$f = 'calculer_champ_' . $nom_champ;
if (function_exists($f))
return $f($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
......
<?php
# Fonctions de traitement de champs Spip homonymes de champs SQL
# mais non e'quivalent
function calculer_champ_EXTRA ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
{
$code = 'trim(' . index_pile($id_boucle, "extra", $boucles) . ')';
if ($fonctions) {
// #EXTRA [(#EXTRA|isbn)]
// Champs extra
// Non documentes, en voie d'obsolescence, cf. ecrire/inc_extra.php3
function balise_EXTRA_dist ($p) {
$_extra = champ_sql('extra', $p);
$p->code = 'trim($_extra)';
// Gerer la notation [(#EXTRA|isbn)]
include_ecrire("inc_extra.php3");
reset($fonctions);
list($key, $champ_extra) = each($fonctions);
$type_extra = $boucles[$id_boucle]->type_requete;
if (extra_champ_valide($type_extra, $champ_extra)) {
unset($fonctions[$key]);
$code = "extra($code, '".addslashes($champ_extra )."')";
}
// Appliquer les filtres definis par le webmestre
$filtres = extra_filtres($type_extra, $champ_extra);
if ($filtres) {
reset($filtres);
while (list(, $f) = each($filtres)) $code = "$f($code)";
}
}
return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
if ($p->fonctions) {
include_ecrire("inc_extra.php3");
foreach ($p->fonctions as $key => $champ_extra)
$type_extra = $p->boucles[$p->id_boucle]->type_requete;
// ci-dessus est sans doute un peu buggue : si on invoque #EXTRA
// depuis un sous-objet sans champ extra d'un objet a champ extra,
// on aura le type_extra du sous-objet (!)
if (extra_champ_valide($type_extra, $champ_extra)) {
unset($p->fonctions[$key]);
$p->code = "extra($p->code, '".addslashes($champ_extra)."')";
}
// Appliquer les filtres definis par le webmestre
$filtres = extra_filtres($type_extra, $champ_extra);
if ($filtres) foreach ($filtres as $f)
$p->code = "$f($p->code)";
}
return $p;
}
function calculer_champ_LANG ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
{
$code = '(($x = '.index_pile($id_boucle, "lang", $boucles).') ? $x : $GLOBALS[spip_lang])';
return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
// #LANG
// non documente ?
function balise_LANG_dist ($p) {
$_lang = champ_sql('lang', $p);
$p->code = '($_lang ? $_lang : $GLOBALS[spip_lang])';
return $p;
}
function calculer_champ_LESAUTEURS ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
{
$code = index_pile($id_boucle, 'lesauteurs', $boucles);
if ((!$code) || ($code == '$Pile[0][lesauteurs]'))
$code = 'sql_auteurs(' .
index_pile($id_boucle, "id_article", $boucles) .
')';
return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
// #LESAUTEURS
// les auteurs d'un article (ou d'un article syndique)
// http://www.spip.net/fr_article902.html
// http://www.spip.net/fr_article911.html
function balise_LESAUTEURS_dist ($p) {
// Cherche le champ 'lesauteurs' dans la pile
$_lesauteurs = champ_sql('lesauteurs', $p);
// Si le champ n'existe pas (cas de spip_articles), on donne la
// construction speciale sql_auteurs(id_article) ;
// dans le cas contraire on prend le champ 'les_auteurs' (cas de
// spip_syndic_articles)
if ($_lesauteurs AND $_lesauteurs != '$Pile[0][lesauteurs]') {
$p->code = $_lesauteurs;
} else {
$_id_article = champ_sql('id_article', $p);
$p->code = "sql_auteurs($_id_article)";
}
return $p;
}
function calculer_champ_PETITION ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
{
$code = 'sql_petitions(' .
index_pile($id_boucle, 'id_article', $boucles)
. '")) ? " " : "")';
return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
// #PETITION
// Champ testant la presence d'une petition
// non documente ???
function balise_PETITION_dist ($p) {
$_id_article = champ_sql('id_article', $p);
$p->code = 'sql_petitions($_id_article)';
return $p;
}
function calculer_champ_POPULARITE ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
{
$code = 'ceil(min(100, 100 * ' .
index_pile($id_boucle, "popularite", $boucles) .
'/ max(1 , 0 + lire_meta(\'popularite_max\'))))';
return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
}
// #POPULARITE
// http://www.spip.net/fr_article1846.html
function balise_POPULARITE_dist ($p) {
$_popularite = champ_sql('popularite', $p);
$p->code = "ceil(min(100, 100 * $_popularite
/ max(1 , 0 + lire_meta('popularite_max'))))";
return $p;
}
function calculer_champ_DATE ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
# Uniquement hors-boucles, pour date passee dans l'URL ou contexte_inclus
return applique_filtres($fonctions,
index_pile($id_boucle, 'date', $boucles),
$id_boucle, $boucles, $id_mere);
// #DATE
// Cette fonction n'est utile que parce qu'on a besoin d'aller chercher
// dans le contexte general quand #DATE est en dehors des boucles
// http://www.spip.net/fr_article1971.html
function balise_DATE_dist ($p) {
$_date = champ_sql('date', $p);
$p->code = "$_date";
return $p;
}
# Fonction commune aux logos (rubriques, articles...)
function calculer_champ_LOGO($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
......
......@@ -89,7 +89,6 @@ function calculer_requete(&$boucle) {
case 'hierarchie':
$boucle->from[] = "rubriques AS $id_table";
# $boucle->select[] = "rubriques.id_parent";
break;
case 'syndication':
......@@ -115,9 +114,9 @@ function calculer_requete(&$boucle) {
// En absence de champ c'est un decompte : on prend la primary pour
// avoir qqch (le marteau-pilon * est trop couteux, et le COUNT
// incompatible avec le cas general)
return 'spip_abstract_select(array("'.
return "spip_abstract_select(\n\t\tarray(\"".
((!$boucle->select) ? $id_field :
join('", "', array_unique($boucle->select))) .
join("\",\n\t\t\"", array_unique($boucle->select))) .
'"), # SELECT
array("' .
join('","', array_unique($boucle->from)) .
......
......@@ -293,14 +293,14 @@ function calculer_champ_divers($fonctions, $nom_champ, $id_boucle, &$boucles, $i
// Fonctions OK
//
function calculer_balise_INTRODUCTION($params) {
$params->code = 'calcul_introduction(\'' .
$params->boucles[$params->id_boucle]->type_requete . "',\n" .
index_pile($params->id_boucle, "texte", $params->boucles) . ",\n" .
index_pile($params->id_boucle, "chapo", $params->boucles) . ",\n" .
index_pile($params->id_boucle, "descriptif", $params->boucles) . ")\n";
return $params->retour();
function balise_INTRODUCTION_dist ($p) {
$_type = $p->boucles[$p->id_boucle]->type_requete;
$_texte = champ_sql('texte', $p);
$_chapo = champ_sql('chapo', $p);
$_descriptif = champ_sql('descriptif', $p);
$p->code = "calcul_introduction('$_type', $_texte, $_chapo, $_descriptif)";
return $p;
}
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter