/** * #PETITION * retourne '' si l'article courant n'a pas de petition * le texte de celle-ci sinon (et ' ' si il est vide) * cf FORMULAIRE_PETITION * * http://code.spip.net/@balise_PETITION_dist * * @param $p * @return */ function balise_PETITION_dist($p) { $nom = $p->id_boucle; $p->code = "quete_petitions(" . champ_sql('id_article', $p) . ",'" . $p->boucles[$nom]->type_requete . "','" . $nom . "','" . $p->boucles[$nom]->sql_serveur . "', \$Cache)"; $p->interdire_scripts = false; return $p; }
/** * Generer les boutons d'admin des forum selon les droits du visiteur * en SPIP >= 2.1 uniquement * * @param object $p * @return object */ function balise_BOUTONS_ADMIN_FORUM_dist($p) { if (($_id = interprete_argument_balise(1, $p)) === NULL) { $_id = champ_sql('id_forum', $p); } $p->code = "\n'<'.'?php\n\tif (isset(\$GLOBALS[\\'visiteur_session\\'][\\'statut\\'])\n\t AND \$GLOBALS[\\'visiteur_session\\'][\\'statut\\']==\\'0minirezo\\'\n\t\tAND (\$id = '.intval({$_id}).')\n\t\tAND\tinclude_spip(\\'inc/autoriser\\')\n\t\tAND autoriser(\\'moderer\\',\\'forum\\',\$id)) {\n\t\t\tinclude_spip(\\'inc/actions\\');include_spip(\\'inc/filtres\\');\n\t\t\techo \"<div class=\\'boutons spip-admin actions modererforum\\'>\"\n\t\t\t. bouton_action(_T(\\'forum:icone_supprimer_message\\'),generer_action_auteur(\\'instituer_forum\\',\$id.\\'-off\\',ancre_url(self(),\\'forum\\')),\\'poubelle\\')\n\t\t\t. bouton_action(_T(\\'forum:icone_bruler_message\\'),generer_action_auteur(\\'instituer_forum\\',\$id.\\'-spam\\',ancre_url(self(),\\'forum\\')),\\'spam\\')\n\t\t\t. \"</div>\";\n\t\t}\n?'.'>'"; $p->interdire_scripts = false; return $p; }
function balise_AVANCEMENT_CAMPAGNE_dist($p) { if ($p->type_requete != "souscription_campagnes") { $msg = array('zbug_champ_hors_boucle', array('champ' => '#AVANCEMENT_CAMPAGNE')); erreur_squelette($msg, $p); } else { $_campagne = champ_sql('id_souscription_campagne', $p); $_type_objectif = champ_sql('type_objectif', $p); $_objectif_initial = champ_sql('objectif_initial', $p); $p->code = "calcul_avancement_campagne({$_campagne}, {$_type_objectif}, {$_objectif_initial})"; $p->interdire_scripts = false; } return $p; }
function balise_LESMOTS_dist($p){ $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; // #LESMOTS hors boucle ? ne rien faire if (!$type = $p->boucles[$i_boucle]->type_requete) { $p->code = "''"; $p->interdire_scripts = false; return $p; } // le compilateur 1.9.2 ne calcule pas primary pour les tables secondaires // il peut aussi arriver une table sans primary (par ex: une vue) if (!($primary = $p->boucles[$i_boucle]->primary)) { include_spip('inc/vieilles_defs'); # 1.9.2 pour trouver_def_table list($nom, $desc) = trouver_def_table( $p->boucles[$i_boucle]->type_requete, $p->boucles[$i_boucle]); $primary = $desc['key']['PRIMARY KEY']; } $primary = explode(',',$primary); $id = array(); foreach($primary as $key) $id[] = champ_sql(trim($key),$p); $primary = implode(".'-'.",$id); $p->code = "classe_boucle_crayon('" . $type ."'," .sinon(interprete_argument_balise(1,$p),"''") ."," . $primary .").' '"; $p->interdire_scripts = false; return $p; // Cherche le champ 'lesmots' dans la pile $_lesmots = champ_sql('lesmots', $p); // Si le champ n'existe pas (cas de spip_articles), on applique // le fond les_mots.html en passant id_article dans le contexte; // dans le cas contraire on prend le champ SQL 'lesmots' if ($_lesmots AND $_lesmots != '$Pile[0][\'lesmots\']') { $p->code = "safehtml($_lesmots)"; // $p->interdire_scripts = true; } else { if ($cle = $p->boucles[$p->id_boucle]->primary) $id = champ_sql($primary, $p); $p->code = "recuperer_fond('fonds/lesmots', array($cle => $id))"; // securite imposee par recuperer_fond() $p->interdire_scripts = false; } return $p; }
/** * Generer n'importe quel info pour un objet : #INFO_TITRE{article, #ENV{id_article}} * Utilise la fonction generer_info_entite() de inc/filtres * se reporter a sa documentation * */ function balise_INFO__dist($p) { $info = $p->nom_champ; $type_objet = interprete_argument_balise(1, $p); $id_objet = interprete_argument_balise(2, $p); if ($info === 'INFO_' or !$type_objet or !$id_objet) { $msg = _T('zbug_balise_sans_argument', array('balise' => ' INFO_')); erreur_squelette($msg, $p); $p->interdire_scripts = true; return $p; } else { $info_sql = strtolower(substr($info, 5)); $code = "generer_info_entite({$id_objet}, {$type_objet}, '{$info_sql}'" . ($p->etoile ? "," . _q($p->etoile) : "") . ")"; $p->code = champ_sql($info, $p, $code); $p->interdire_scripts = true; return $p; } }
function balise_CS_SOMMAIRE_dist($p) { // id de l'article a trouver pour retourner son texte $texte = ($v = interprete_argument_balise(1,$p))!==NULL ? 'cs_champ_sql('.$v.')' : champ_sql('texte', $p); if ($p->type_requete == 'articles' || $v!==NULL) { $p->code = 'cs_supprime_notes('.$texte.')'; } else { $p->code = "''"; } $p->interdire_scripts = true; return $p; }
function balise_MODELE_dist($p) { $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false); // erreur de syntaxe = fond absent // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP if (!$_contexte) $contexte = array(); if (!isset($_contexte[1])) { $msg = array('zbug_balise_sans_argument', array('balise' => ' MODELE')); erreur_squelette($msg, $p); } else { $nom = $_contexte[1]; unset($_contexte[1]); if (preg_match("/^\s*'[^']*'/s", $nom)) $nom = "'modeles/" . substr($nom,1); else $nom = "'modeles/' . $nom"; // Incoherence dans la syntaxe du contexte. A revoir. // Reserver la cle primaire de la boucle courante si elle existe if (isset($p->boucles[$p->id_boucle]->primary)) { $primary = $p->boucles[$p->id_boucle]->primary; if (!strpos($primary,',')) { $id = champ_sql($primary, $p); $_contexte[] = "'$primary'=>".$id; $_contexte[] = "'id'=>".$id; } } $_contexte[] = "'recurs'=>(++\$recurs)"; $connect = ''; if (isset($p->boucles[$p->id_boucle])) $connect = $p->boucles[$p->id_boucle]->sql_serveur; $_options = memoriser_contexte_compil($p); $_options = "'compil'=>array($_options), 'trim'=>true" . (isset($_contexte['ajax'])?", 'ajax'=>true":''); $page = sprintf(CODE_RECUPERER_FOND, $nom, 'array(' . join(',', $_contexte) .')', $_options, _q($connect)); $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n"; $p->interdire_scripts = false; // securite assuree par le squelette } return $p; }
function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite) { $code = "quete_logo('{$id_objet}', '" . ($suite == '_SURVOL' ? 'off' : ($suite == '_NORMAL' ? 'on' : 'ON')) . "', {$_id_objet}," . ($suite == '_RUBRIQUE' ? champ_sql("id_rubrique", $p) : ($type == 'rubrique' ? "quete_parent({$_id_objet})" : "''")) . ", " . intval($fichier) . ")"; if ($fichier) { return $code; } $code = "\n((!is_array(\$l = {$code})) ? '':\n (" . '"<img class=\\"spip_logos\\" alt=\\"\\"' . ($align ? " align=\\\"{$align}\\\"" : '') . ' src=\\"$l[0]\\"" . $l[2] . ($l[1] ? " onmouseover=\\"this.src=\'$l[1]\'\\" onmouseout=\\"this.src=\'$l[0]\'\\"" : "") . \' />\'))'; if (!$lien) { return $code; } return '(strlen($logo=' . $code . ')?\'<a href="\' .' . $lien . ' . \'">\' . $logo . \'</a>\':\'\')'; }
function balise_INTRODUCTION($p) { $type = $p->type_requete; $_texte = champ_sql('texte', $p); $_descriptif = "''"; $_id = 0; $_lgr = "600"; switch ($type) { case 'articles': $_chapo = champ_sql('chapo', $p); $_descriptif = champ_sql('descriptif', $p); $_texte = "(strlen($_descriptif) OR chapo_redirigetil($_chapo)) ? '' : $_chapo . \"\\n\\n\" . $_texte"; $_lgr = "500"; break; case 'rubriques': $_descriptif = champ_sql('descriptif', $p); break; case 'breves': $_lgr = "300"; break; } // longueur en parametre ? if(($v = interprete_argument_balise(1,$p))!==NULL) $_lgr = "-intval($v)" ; $_id = champ_sql(id_table_objet($racc = objet_type($type)), $p); $p->code = "cs_introduction($_texte, $_descriptif, $_lgr, $_id, '$racc', \$connect)"; #$p->interdire_scripts = true; $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro return $p; }
function balise_CS_SOMMAIRE_dist($p) { if ($p->type_requete == 'articles') { $p->code = 'cs_supprime_notes(' . champ_sql('texte', $p) . ')'; } else { $p->code = "''"; } $p->interdire_scripts = true; return $p; }
/** * Liste les valeurs des champs de type liste (enum, radio, case) * * Ces champs enregistrent en base la valeur de la clé * Il faut donc transcrire clé -> valeur * * @example * ``` * #LISTER_VALEURS{champ} * #LISTER_VALEURS{champ, " > "} * #LISTER_VALEURS**{champ} // retourne un tableau cle/valeur * ``` * * @note * Pour des raisons d'efficacité des requetes SQL * le paramètre "champ" ne peut être calculé * ``#LISTER_VALEURS{#GET{champ}}`` ne peut pas fonctionner. * * Si cette restriction est trop limitative, on verra par la suite * pour l'instant, on laisse comme ca... * * @balise * @param Champ $p * AST au niveau de la balise * @return Champ * AST complété par le code PHP de la balise */ function balise_LISTER_VALEURS_dist($p) { // prendre nom de la cle primaire de l'objet pour calculer sa valeur $id_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; // s'il n'y a pas de nom de boucle, on ne peut pas fonctionner if (!isset($p->boucles[$id_boucle])) { $msg = array('zbug_champ_hors_boucle', array('champ' => ' LISTER_VALEURS')); erreur_squelette($msg, $p); $p->code = "''"; return $p; } $objet = $p->boucles[$id_boucle]->id_table; $_id_objet = $p->boucles[$id_boucle]->primary; $id_objet = champ_sql($_id_objet, $p); // recuperer les parametres : colonne sql (champ) if (!$colonne = interprete_argument_balise(1, $p)) { $msg = array('zbug_balise_sans_argument', array('balise' => ' LISTER_VALEURS')); erreur_squelette($msg, $p); $p->code = "''"; return $p; } $separateur = interprete_argument_balise(2, $p); if (!$separateur) $separateur = "', '"; // demander la colonne dans la requete SQL // $colonne doit etre un texte 'nom_du_champ' if ($p->param[0][1][0]->type != 'texte') { $msg = array('cextras:zbug_balise_argument_non_texte', array('nb'=>1, 'balise' => ' LISTER_VALEURS')); erreur_squelette($msg, $p); $p->code = "''"; return $p; } $texte_colonne = $p->param[0][1][0]->texte; $valeur = champ_sql($texte_colonne, $p); // generer le code d'execution $p->code = "calculer_balise_LISTER_VALEURS('$objet', $colonne, $valeur)"; // retourne un array si #LISTER_VALEURS** // sinon fabrique une chaine avec le separateur designe. if ($p->etoile != "**") { $p->code = "(is_array(\$a = $p->code) ? join($separateur, \$a) : " . $p->code . ")"; } return $p; }
/** * Compile la balise `#PUBLIE` qui indique si un objet est publié ou non * * @balise * @link http://www.spip.net/5545 * @see objet_test_si_publie() * @example * ``` * #PUBLIE : porte sur la boucle en cours * [(#PUBLIE{article, 3}|oui) ... ] : pour l'objet indiqué * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_PUBLIE_dist($p) { if (!($_type = interprete_argument_balise(1, $p))) { $_type = _q($p->type_requete); $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p); } else { $_id = interprete_argument_balise(2, $p); } $connect = ''; if (isset($p->boucles[$p->id_boucle])) { $connect = $p->boucles[$p->id_boucle]->sql_serveur; } $p->code = "(objet_test_si_publie(" . $_type . ",intval(" . $_id . ")," . _q($connect) . ")?' ':'')"; $p->interdire_scripts = false; return $p; }
function balise_URL_SITE_dist($p) { $code = champ_sql('url_site', $p); if (strpos($code, '@$Pile[0]') !== false) { $code = generer_generer_url('site', $p); if ($code === NULL) { return NULL; } } else { if (!$p->etoile) { $code = "calculer_url({$code},'','url', \$connect)"; } } $p->code = $code; $p->interdire_scripts = false; return $p; }
/** * Balise indiquant un champ SQL crayonnable * * @note * Si cette fonction est absente, `balise_EDIT_dist()` déclarée par SPIP * ne retourne rien * * @example * ``` * <div class="#EDIT{texte}">#TEXTE</div> * <div class="#EDIT{ps}">#PS</div> * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer **/ function balise_EDIT($p) { // le code compile de ce qui se trouve entre les {} de la balise $label = interprete_argument_balise(1, $p); // Verification si l'on est dans le cas d'une meta // #EDIT{meta-descriptif_site} ou #EDIT{meta-demo/truc} if (preg_match('/meta-(.*)\'/', $label, $meta)) { $type = 'meta'; $label = 'valeur'; $primary = $meta[1]; $p->code = "classe_boucle_crayon('" . $type . "','" . $label . "'," . "str_replace('/', '__', '{$primary}')" . ").' '"; $p->interdire_scripts = false; return $p; } $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; // #EDIT hors boucle? ne rien faire if (!isset($p->boucles[$i_boucle]) or !($type = $p->boucles[$i_boucle]->type_requete)) { $p->code = "''"; $p->interdire_scripts = false; return $p; } // crayon sur une base distante 'nua__article-intro-5' if ($distant = $p->boucles[$i_boucle]->sql_serveur) { $type = $distant . '__' . $type; } // le compilateur 1.9.2 ne calcule pas primary pour les tables secondaires // il peut aussi arriver une table sans primary (par ex: une vue) if (!($primary = $p->boucles[$i_boucle]->primary)) { include_spip('inc/vieilles_defs'); # 1.9.2 pour trouver_def_table if (function_exists('trouver_def_table')) { list($nom, $desc) = trouver_def_table($p->boucles[$i_boucle]->type_requete, $p->boucles[$i_boucle]); $primary = $desc['key']['PRIMARY KEY']; } } // On rajoute ici un debug dans le cas où aucune clé primaire n'est trouvée. // Cela peut se présenter par exemple si on utilise #EDIT{monchamp} directement // dans une boucle CONDITION sans faire référence au nom de la boucle d'au dessus. if (!$primary) { erreur_squelette(_T('crayons:absence_cle_primaire'), $p); } $primary = explode(',', $primary); $id = array(); foreach ($primary as $key) { $id[] = champ_sql(trim($key), $p); } $primary = implode(".'-'.", $id); $p->code = "classe_boucle_crayon('" . $type . "'," . sinon($label, "''") . "," . $primary . ").' '"; $p->interdire_scripts = false; return $p; }
/** * Savoir si on objet est publie ou non * * @param <type> $p * @return <type> */ function balise_PUBLIE_dist($p) { $type = $p->type_requete; $_statut = champ_sql('statut',$p); $_texte = champ_sql('texte', $p); $_descriptif = "''"; switch ($type){ case 'articles': $p->code = "$_statut=='publie'"; if ($GLOBALS['meta']["post_dates"] == 'non'){ $_date_pub = champ_sql('date',$p); $p->code .= "AND $_date_pub<quete_date_postdates()"; } break; case 'auteurs': $_id = champ_sql('id_auteur',$p); $p->code = "sql_countsel('spip_articles AS AR JOIN spip_auteurs_articles AS AU ON AR.id_article=AU.id_article', 'AU.id_auteur=intval('.$_id.') AND AR.statut=\'publie\''" .(($GLOBALS['meta']['post_dates'] == 'non')?".' AND AR.date<'.sql_quote(quete_date_postdates())":'') .")>0"; break; // le cas des documents prend directement en compte la mediatheque // car le fonctionnement par defaut de SPIP <=2.0 est trop tordu et insatisfaisant case 'documents': $p->code = "$_statut=='publie'"; if ($GLOBALS['meta']["post_dates"] == 'non'){ $_date_pub = champ_sql('date_publication',$p); $p->code .= "AND $_date_pub<quete_date_postdates()"; } break; default: $p->code = "($_statut=='publie'?' ':'')"; break; } $p->code = "((".$p->code.")?' ':'')"; #$p->interdire_scripts = true; return $p; }
/** * #COMPOSITION * Renvoie la composition s'appliquant a un objet * en tenant compte, le cas echeant, de l'heritage. * * Sans precision, l'objet et son identifiant sont pris * dans la boucle en cours, mais l'on peut specifier notre recherche * en passant objet et id_objet en argument de la balise : * #COMPOSITION{article, 8} * * #COMPOSITION* renvoie toujours le champs brut, sans tenir compte de l'heritage * * @param array $p AST au niveau de la balise * @return array AST->code modifie pour calculer le nom de la composition */ function balise_COMPOSITION_dist($p) { $_composition = ""; if ($_objet = interprete_argument_balise(1, $p)) { $_id_objet = interprete_argument_balise(2, $p); } else { $_composition = champ_sql('composition',$p); $_id_objet = champ_sql($p->boucles[$p->id_boucle]->primary, $p); $_objet = "objet_type('" . $p->boucles[$p->id_boucle]->id_table . "')"; } // si on veut le champ brut, et qu'on l'a sous la main, inutile d'invoquer toute la machinerie if ($_composition AND $p->etoile) $p->code = $_composition; else { $connect = $p->boucles[$p->id_boucle]->sql_serveur; $p->code = "compositions_determiner($_objet, $_id_objet, '$connect', ".($p->etoile?'true':'false').")"; // ne declencher l'usine a gaz que si composition est vide ... if ($_composition) $p->code = "((\$zc=$_composition)?(\$zc=='-'?'':\$zc):".$p->code.")"; } return $p; }
function balise_TITRE__dist($p) { $champ = $p->nom_champ; if ($f = charger_fonction($champ, 'balise', true)) return $f($p); $code = champ_sql($champ, $p); if (strpos($code, '@$Pile[0]') !== false) { // le champ est absent de la base, on peut calculer la balise preg_match(",^TITRE_([A-Z_]+)?$,i", $champ, $regs); $objet = strtolower($regs[1]); $table = cs_table_objet($objet); $champ_parent = id_table_objet($table); // id de l'objet a trouver pour retourner son titre $id = ($v = interprete_argument_balise(1,$p))!==NULL ? $v : champ_sql('id_'.$objet, $p); // le code php a executer, avant de le passer aux traitements $p->code = cs_titre_traitements("cs_titre_id(intval($id), '$table', '$champ_parent')", $table); } else // puisque le champ est present dans la base, on le renvoie $p->code = champ_sql($champ, $p); $p->interdire_scripts = false; return $p; }
function balise_THEME_dist($p) { $p->code = champ_sql('theme', $p, "(defined('NOM_THEME') ? NOM_THEME : '')"); return $p; }
function balise_LISTER_VALEURS_dist($p) { // prendre nom de la cle primaire de l'objet pour calculer sa valeur $id_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; $objet = $p->boucles[$id_boucle]->id_table; $_id_objet = $p->boucles[$id_boucle]->primary; $id_objet = champ_sql($_id_objet, $p); // recuperer les parametres : colonne sql (champ) et separateur $colonne = interprete_argument_balise(1, $p); $separateur = interprete_argument_balise(2, $p); if (!$separateur) $separateur = "', '"; // demander la colonne dans la requete SQL // $colonne doit etre un texte 'nom' $texte_colonne = $p->param[0][1][0]->texte; $valeur = champ_sql($texte_colonne, $p); // generer le code d'execution $p->code = "calculer_balise_LISTER_VALEURS('$objet', '$_id_objet', $colonne, $id_objet, $valeur)"; // retourne un array si #LISTER_VALEURS** // sinon fabrique une chaine avec le separateur designe. if ($p->etoile != "**") { $p->code = "join($separateur, " . $p->code . ")"; } return $p; }
/** * #NB_INSCRITS * pour afficher le nombre d'inscrits (qui ont repondu oui) a un evenement * * @param <type> $p * @return <type> */ function balise_NB_INSCRITS_dist($p) { $id_evenement = champ_sql('id_evenement', $p); $p->code = "sql_countsel('spip_evenements_participants','id_evenement='.intval($id_evenement).' AND reponse=\'oui\'')"; return $p; }
function balise_EDIT($p) { // le code compile de ce qui se trouve entre les {} de la balise $label = interprete_argument_balise(1,$p); // Verification si l'on est dans le cas d'une meta // #EDIT{meta-descriptif_site} #EDIT{nom_site} et #EDIT{email_webmaster} if(preg_match('/meta-(.*)\'/',$label,$meta)){ if(in_array($meta[1],array('descriptif_site','nom_site','email_webmaster'))){ $type = 'meta'; $label= 'valeur'; $primary = $meta[1]; $p->code = "classe_boucle_crayon('" . $type ."'," .sinon($label,"''") ."," . $primary .").' '"; $p->interdire_scripts = false; return $p; } } $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; // #EDIT hors boucle? ne rien faire if (!$type = ($p->boucles[$i_boucle]->type_requete)) { $p->code = "''"; $p->interdire_scripts = false; return $p; } // crayon sur une base distante 'nua:article-intro-5' if ($distant = $p->boucles[$i_boucle]->sql_serveur) $type = $distant.'__'.$type; // le compilateur 1.9.2 ne calcule pas primary pour les tables secondaires // il peut aussi arriver une table sans primary (par ex: une vue) if(!($primary = $p->boucles[$i_boucle]->primary)){ include_spip('inc/vieilles_defs'); # 1.9.2 pour trouver_def_table list($nom, $desc) = trouver_def_table( $p->boucles[$i_boucle]->type_requete, $p->boucles[$i_boucle]); $primary = $desc['key']['PRIMARY KEY']; } $primary = explode(',',$primary); $id = array(); foreach($primary as $key) { $id[] = champ_sql(trim($key),$p); } $primary = implode(".'-'.",$id); $p->code = "classe_boucle_crayon('" . $type ."'," .sinon($label,"''") ."," . $primary .").' '"; $p->interdire_scripts = false; return $p; }
function balise_PARAMETRES_FORUM_dist($p) { // s'il y a un id_article dans le contexte, regarder le statut // accepter_forum de cet article $_id_article = champ_sql('id_article', $p); $p->code = ' // refus des forums ? (quete_accepter_forum(' . $_id_article . ')=="non" OR ($GLOBALS["meta"]["forums_publics"] == "non" AND quete_accepter_forum(' . $_id_article . ') == "")) ? "" : // sinon: '; // pas de calculs superflus si le site est monolingue $lang = strpos($GLOBALS['meta']['langues_utilisees'], ','); // si on est dans une boucle de forums, c'est une reponse if ($p->type_requete == 'forums') { $_id_reponse = champ_sql('id_forum', $p); } else { $_id_reponse = "null"; } // objet et id_objet principaux sont a determiner // dans le contexte ; on demande en tout etat de cause // a la boucle mere de reserver son id_primary if ($p->id_boucle and isset($p->boucles[$p->id_boucle]) and $primary = $p->boucles[$p->id_boucle]->primary) { $_type = $p->boucles[$p->id_boucle]->type_requete; $_primary = champ_sql($primary, $p); } else { $_type = "null"; $_primary = "null"; } // le code de base des parametres $c = 'calcul_parametres_forum($Pile[0],' . $_id_reponse . ',' . $_type . ',' . $_primary . ')'; // ajouter la lang, eventuellement donnee par le contexte if ($lang) { $_lang = champ_sql('lang', $p); $c = "lang_parametres_forum({$c},{$_lang})"; } // Syntaxe [(#PARAMETRES_FORUM{#SELF})] pour fixer le retour du forum # note : ce bloc qui sert a recuperer des arguments calcules pourrait # porter un nom et faire partie de l'API. $retour = interprete_argument_balise(1, $p); if ($retour === NULL) { $retour = "''"; } // Attention un eventuel &retour=xxx dans l'URL est prioritaire $c .= '. (($lien = (_request("retour") ? _request("retour") : str_replace("&", "&", ' . $retour . '))) ? "&retour=".rawurlencode($lien) : "")'; $c = '(' . $c . ')'; // Ajouter le code d'invalideur specifique a cette balise include_spip('inc/invalideur'); if ($i = charger_fonction('code_invalideur_forums', '', true)) { $p->code .= $i($p, $c); } else { $p->code .= $c; } $p->interdire_scripts = false; return $p; }
/** * Calcule le code HTML pour l'image d'un logo * * @param string $id_objet * Nom de la clé primaire de l'objet (id_article, ...) * @param string $_id_objet * Code pour la compilation permettant de récupérer la valeur de l'identifiant * @param string $type * Type d'objet * @param string $align * Alignement demandé du logo * @param int $fichier * - -1 pour retourner juste le chemin de l'image * - 0 pour retourner le code HTML de l'image * @param string $lien * Lien pour encadrer l'image avec si présent * @param Champ $p * Pile au niveau de la balise * @param string $suite * Suite éventuelle de la balise logo, telle que `_SURVOL`, `_NORMAL` ou `_RUBRIQUE`. * @return string * Code compilé retournant le chemin du logo ou le code HTML du logo. **/ function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite) { $code = "quete_logo('{$id_objet}', '" . ($suite == '_SURVOL' ? 'off' : ($suite == '_NORMAL' ? 'on' : 'ON')) . "', {$_id_objet}," . ($suite == '_RUBRIQUE' ? champ_sql("id_rubrique", $p) : ($type == 'rubrique' ? "quete_parent({$_id_objet})" : "''")) . ", " . intval($fichier) . ")"; if ($fichier) { return $code; } // class spip_logos a supprimer ulterieurement (transition douce vers spip_logo) // cf http://core.spip.net/issues/2483 $class = "spip_logo "; if ($align) { $class .= "spip_logo_{$align} "; } $class .= "spip_logos"; $style = ''; if (in_array($align, array('left', 'right'))) { $style = "float:{$align}"; $align = ""; } $code = "\n((!is_array(\$l = {$code})) ? '':\n (" . '"<img class=\\"' . $class . '\\" alt=\\"\\"' . ($style ? " style=\\\"{$style}\\\"" : '') . ($align ? " align=\\\"{$align}\\\"" : '') . ' src=\\"$l[0]\\"" . $l[2] . ($l[1] ? " onmouseover=\\"this.src=\'$l[1]\'\\" onmouseout=\\"this.src=\'$l[0]\'\\"" : "") . \' />\'))'; if (!$lien) { return $code; } return '(strlen($logo=' . $code . ')?\'<a href="\' .' . $lien . ' . \'">\' . $logo . \'</a>\':\'\')'; }