function balise_SET__dist($p) { $champ = $p->nom_champ; preg_match(",^SET_([A-Z_]+)?$,i", $champ, $filtre); $filtre = strtolower($filtre[1]); $filtre2 = chercher_filtre($filtre); if (!$filtre2) { $err_b_s_a = array('zbug_erreur_filtre', array('filtre' => $filtre)); erreur_squelette($err_b_s_a, $p); } else { $nom = interprete_argument_balise(1,$p); if (!$nom) { $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => $champ)); erreur_squelette($err_b_s_a, $p); } else { $i = 1; $args = array(); while(($a = interprete_argument_balise(++$i,$p)) != NULL) $args[] = $a; $get = function_exists('balise_GET') ? 'balise_GET' : 'balise_GET_dist'; $q = $p; $q->param[0] = array($q->param[0][0], $q->param[0][1]); $get = $get($q); $filtre2 .= '('.$get->code.','.join(",", $args).')'; $p->code = "vide(\$Pile['vars'][$nom] = $filtre2)"; } } $p->interdire_scripts = false; // la balise ne renvoie rien return $p; }
function balise_FOREACH($p) { $_tableau = interprete_argument_balise(1,$p); $_tableau = str_replace("'", "", strtoupper($_tableau)); $_tableau = sinon($_tableau, 'ENV'); $f = 'balise_'.$_tableau; $balise = function_exists($f) ? $f : (function_exists($g = $f.'_dist') ? $g : ''); if($balise) { $_modele = interprete_argument_balise(2,$p); $_modele = str_replace("'", "", strtolower($_modele)); $__modele = 'foreach_'.strtolower($_tableau); $_modele = (!$_modele AND find_in_path('modeles/'.$__modele.'.html')) ? $__modele : ($_modele ? $_modele : 'foreach'); $p->param = @array_shift(@array_shift($p->param)); $p = $balise($p); $filtre = chercher_filtre('foreach'); $p->code = $filtre . "(unserialize(" . $p->code . "), '" . $_modele . "')"; } //On a pas trouve la balise correspondant au tableau a traiter else { erreur_squelette( _L(/*zbug*/'erreur #FOREACH: la balise #'.$_tableau.' n\'existe pas'), $p->id_boucle ); $p->code = "''"; } return $p; }
function balise_HORLOGE_dist($p) { $i = 1; $args = array(); while(($a = interprete_argument_balise($i++,$p)) != NULL) $args[] = $a; $args = count($args)?join(".'||'.", $args):"''"; $p->code = "horloge_params($args)"; $p->interdire_scripts = false; return $p; }
/** * #BOITE_PIED{class} * Racourci pour passer au pied de la boite, avant sa fermeture * * @param <type> $p * * @return <type> */ function balise_BOITE_PIED_dist($p) { $_class = interprete_argument_balise(1, $p); $_class = $_class ? "{$_class}" : ""; $f = chercher_filtre('boite_pied'); $p->code = "{$f}({$_class})"; $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_CFG_ARBO($p) { if (!($arg = interprete_argument_balise(1, $p))) { $arg = "''"; } $p->interdire_scripts = false; $p->code = 'affiche_arborescence(' . $arg . ')'; return $p; }
function balise_CFG_CHEMIN($p) { if (!($arg = interprete_argument_balise(1, $p))) { $arg = "''"; } $sinon = interprete_argument_balise(2, $p); $p->code = '($l = lire_config(' . $arg . ',' . ($sinon && $sinon != "''" ? $sinon : 'null') . ')) ? _DIR_IMG . $l : null'; return $p; }
function balise_RAINETTE_INFOS($p) { $code_meteo = interprete_argument_balise(1, $p); $code_meteo = isset($code_meteo) ? str_replace('\'', '"', $code_meteo) : '""'; $type_info = interprete_argument_balise(2, $p); $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '""'; $p->code = 'calculer_infos(' . $code_meteo . ', ' . $type_info . ')'; $p->interdire_scripts = false; return $p; }
/** * #GERER_ABONNEMENT{#MODE_PAIEMENT,#ABO_UID} * @param $p * @return mixed */ function balise_GERER_ABONNEMENT_dist($p) { $_mode = interprete_argument_balise(1, $p); $_abo_uid = interprete_argument_balise(2, $p); $p->code = ""; if ($_mode and $_abo_uid) { $p->code = "bank_affiche_gerer_abonnement({$_mode},{$_abo_uid})"; } $p->interdire_scripts = false; return $p; }
/** * #PAYER_ABONNEMENT{sips,#ID_TRANSACTION,#HASH} * * @param <type> $p * @return <type> */ function balise_PAYER_ABONNEMENT_dist($p) { $_mode = interprete_argument_balise(1, $p); $_id = interprete_argument_balise(2, $p); $_hash = interprete_argument_balise(3, $p); $p->code = ""; if ($_mode and $_id and $_hash) { $p->code = "( (\$f=charger_fonction('abonnement','presta/'.{$_mode}.'/payer'))?\$f({$_id},{$_hash}):'')"; } $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; } }
/** * Si 3 arguments : Cree un tableau nom_tableau de t1 + t2 * #SET_MERGE{nom_tableau,t1,t2} * #SET_MERGE{nom_tableau,#GET{tableau},#ARRAY{cle,valeur}} * * Si 2 arguments : Merge t1 dans nom_tableau * #SET_MERGE{nom_tableau,t1} * #SET_MERGE{nom_tableau,#GET{tableau}} * * @param Champ $p : objet balise * @return Champ * La balise ne retourne rien ("") **/ function balise_SET_MERGE_dist($p) { $_nom = interprete_argument_balise(1, $p); $_t1 = interprete_argument_balise(2, $p); $_t2 = interprete_argument_balise(3, $p); if ($_nom and $_t1 and !$_t2) { // 2 arguments : merge de $_nom et $_t1 dans $_nom // si le tableau n'existe pas encore, on le cree $p->code = "vide((\$cle={$_nom})\n\t\t\t. vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')\n\t\t\t. vide(is_array(\$new={$_t1})?'':\$new=array(\$new))\n\t\t\t. vide(\$Pile['vars'][\$cle] = array_merge(\$Pile['vars'][\$cle],\$new)))"; } elseif ($_nom and $_t1 and $_t2) { // 3 arguments : merge de $_t1 et $_t2 dans $_nom // si le tableau n'existe pas encore, on le cree $p->code = "vide((\$cle={$_nom})\n\t\t\t. vide((!isset(\$Pile['vars'][\$cle]) OR !is_array(\$Pile['vars'][\$cle]))?\$Pile['vars'][\$cle]=array():'')\n\t\t\t. vide(is_array(\$new1={$_t1})?'':\$new1=array(\$new1))\n\t\t\t. vide(is_array(\$new2={$_t2})?'':\$new2=array(\$new2))\n\t\t\t. vide(\$Pile['vars'][\$cle] = array_merge(\$new1,\$new2)))"; } else { $p->code = "''"; } $p->interdire_scripts = false; // la balise ne renvoie rien return $p; }
/** * #URL_EVENEMENT envoie sur la page de l'evenement * ou sur la page de l'article avec un &id_evenement=xxx * selon la configuration de l'agenda * * @param object $p * @return object */ function balise_URL_EVENEMENT_dist($p) { include_spip("inc/config"); include_spip("balise/url_"); if (lire_config("agenda/url_evenement", 'evenement') !== 'article') { $code = generer_generer_url('evenement', $p); } else { $_ide = interprete_argument_balise(1, $p); if (!$_ide) { $_ide = champ_sql('id_evenement', $p); } $_ida = "generer_info_entite({$_ide},'evenement','id_article')"; $code = generer_generer_url_arg('article', $p, $_ida); $code = "parametre_url({$code},'id_evenement',{$_ide},'&')"; } $code = champ_sql('url_evenement', $p, $code); $p->code = $code; if (!$p->etoile) { $p->code = "vider_url({$code})"; } $p->interdire_scripts = false; return $p; }
function balise_SMILEYS_dist($p) { // Fonctions abandonnees par le plugin Porte Plume $js_compat = !defined('_DIR_PLUGIN_PORTE_PLUME')?"":"<script type=\"text/javascript\">/*<![CDATA[*/ // From SPIP 2.0 (spip_barre.js) if(typeof barre_inserer!='function') { function barre_inserer(text,champ) { var txtarea = champ; if(document.selection){ txtarea.focus(); var r = document.selection.createRange(); if (r == null) { txtarea.selectionStart = txtarea.value.length; txtarea.selectionEnd = txtarea.selectionStart; } else { var re = txtarea.createTextRange(); var rc = re.duplicate(); re.moveToBookmark(r.getBookmark()); rc.setEndPoint('EndToStart', re); txtarea.selectionStart = rc.text.length; txtarea.selectionEnd = rc.text.length + r.text.length; } } mozWrap(txtarea, '', text); }} // From http://www.massless.org/mozedit/ if(typeof mozWrap!='function') { function mozWrap(txtarea, open, close) { var selLength = txtarea.textLength; var selStart = txtarea.selectionStart; var selEnd = txtarea.selectionEnd; if (selEnd == 1 || selEnd == 2) selEnd = selLength; var selTop = txtarea.scrollTop; // Raccourcir la selection par double-clic si dernier caractere est espace if (selEnd - selStart > 0 && (txtarea.value).substring(selEnd-1,selEnd) == ' ') selEnd = selEnd-1; var s1 = (txtarea.value).substring(0,selStart); var s2 = (txtarea.value).substring(selStart, selEnd) var s3 = (txtarea.value).substring(selEnd, selLength); txtarea.value = s1 + open + s2 + close + s3; selDeb = selStart + open.length; selFin = selEnd + close.length; window.setSelectionRange(txtarea, selDeb, selFin); txtarea.scrollTop = selTop; txtarea.focus(); return; }} /*]]>*/</script>\n"; // le tableau des smileys est present dans les metas $smileys = cs_lire_data_outil('smileys');; // valeurs par defaut $nb_col = 8; $titre = _T('couteau:smileys_dispos'); $head = ''; $liens = false; // traitement des arguments : [(#SMILEYS{arg1, arg2, ...})] $n=1; $arg = interprete_argument_balise($n++,$p); while ($arg){ // un nombre est le nombre de colonne if (preg_match(",'([0-9]+)',", $arg, $reg)) $nb_col = intval($reg[1]); // on veut un titre elseif ($arg=="'titre'") $head = "<thead><tr class=\"row_first\"><td colspan=\"$nb_col\">$titre</td></tr></thead>"; // on veut un lien d'insertion sur chaque smiley elseif ($arg=="'liens'") { $liens = true; include_spip('outils/smileys'); $smileys = smileys_uniques($smileys); } $arg = interprete_argument_balise($n++,$p); } $max = count($smileys[0]); if (!$nb_col) $nb_col = $max; $html = "<table summary=\"$titre\" class=\"spip cs_smileys smileys\">$head"; $l = 1; for ($i=0; $i<$max; $i++) { if ($i % $nb_col == 0) { $class = 'row_'.alterner($l++, 'even', 'odd'); $html .= "<tr class=\"$class\">"; } $html .= $liens ?"<td><a href=\"javascript:barre_inserer('{$smileys[0][$i]}',document.getElementById('".(defined('_SPIP19300')?'texte':'textarea_1')."'))\">{$smileys[1][$i]}</a></td>" :"<td>{$smileys[1][$i]}<br />{$smileys[0][$i]}</td>"; if ($i % $nb_col == $nb_col - 1) $html .= "</tr>\n"; } // on finit la ligne qd meme... if ($i = $max % $nb_col) $html .= str_repeat('<td> </td>', $nb_col - $i) . '</tr>'; // accessibilite : alt et title avec le smiley en texte $html = $js_compat . echappe_retour($html, 'SMILE'); $html = str_replace("'", "\'", $html); $p->code = "'$html\n</table>\n'"; $p->interdire_scripts = false; $p->type = 'html'; return $p; }
/** * #SAUTER{n} permet de sauter en avant n resultats dans une boucle * La balise modifie le compteur courant de la boucle, mais pas les autres * champs * * L'argument n doit etre superieur a zero sinon la balise ne fait rien * Lorsque sql_seek est disponible, il est utilise, * sinon le saut est realise par n sql_fetch * * @param <type> $p * @return <type> */ function balise_SAUTER_dist($p){ $_nb = interprete_argument_balise(1,$p); $_compteur = "\$Numrows['".$p->id_boucle."']['compteur_boucle']"; $_max = "\$Numrows['".$p->id_boucle."']['total']"; $p->code = "spip_bonux_sauter(\$result,$_compteur,$_nb,$_max)"; $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; }
function balise_BRANCHE_SPECIALISEE($p) { $mot_rubrique = interprete_argument_balise(1, $p); $mot_rubrique = isset($mot_rubrique) ? str_replace('\'', '"', $mot_rubrique) : '""'; $critere = interprete_argument_balise(2, $p); $critere = isset($critere) ? str_replace('\'', '"', $critere) : '"in"'; $mode = "branche"; $p->code = 'calcul_rubrique_specialisee(' . strtolower($mot_rubrique) . ',' . $mode . ',' . $critere . ')'; $p->interdire_scripts = false; return $p; }
/** * balise #CSS * */ function balise_CSS_dist($p) { $_css = interprete_argument_balise(1, $p); if (!$_css) { $msg = array('zbug_balise_sans_argument', array('balise' => ' CSS')); erreur_squelette($msg, $p); } else { $p->code = "timestamp(direction_css(trouver_fond({$_css})?produire_fond_statique({$_css},array('format'=>'css')):find_in_path({$_css})))"; } $p->interdire_scripts = false; return $p; }
/** * Compile la balise #SVP_BRANCHES_SPIP * * Cette balise retourne une liste des branches de SPIP * * Avec un paramètre indiquant une branche, la balise retourne * une liste des bornes mini et maxi de cette branche. * * @example * #SVP_BRANCHES_SPIP : array('1.9', '2.0', '2.1', ....) * #SVP_BRANCHES_SPIP{3.0} : array('3.0.0', '3.0.99') * * @balise svp_branches_spip * @see calcul_svp_branches_spip() * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer **/ function balise_SVP_BRANCHES_SPIP($p) { // nom d'une branche en premier argument if (!($branche = interprete_argument_balise(1, $p))) { $branche = "''"; } $p->code = 'calcul_svp_branches_spip(' . $branche . ')'; return $p; }
function balise_CSS($p) { $_css = interprete_argument_balise(1, $p); $p->code = "timestamp(direction_css(lesscss_select_css({$_css})))"; $p->interdire_scripts = false; return $p; }
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) { // 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; }
/** * Compile la balise `#LARGEUR_ECRAN` qui définit la largeur d'écran * dans l'espace privé * * @balise * @example * ``` * #LARGEUR_ECRAN{pleine_largeur} * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_LARGEUR_ECRAN_dist($p) { $_class = interprete_argument_balise(1, $p); if (!$_class) { $_class = 'null'; } $p->code = "(is_string({$_class})?vide(\$GLOBALS['largeur_ecran']={$_class}):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))"; return $p; }
function balise_URL_ACTION_AUTEUR_dist($p) { $p->descr['session'] = true; $script = interprete_argument_balise(1,$p); if (!$script OR $script == "''") { $msg = array('zbug_balise_sans_argument', array('balise' => ' URL_ACTION_AUTEUR')); erreur_squelette($msg, $p); } else { $args = interprete_argument_balise(2,$p); if (!$args) $args = "''"; $redirect = interprete_argument_balise(3,$p); // cas d'un appel (squelette) avec '' comme valeur de redirection if ($redirect == "''") $redirect = ""; if ($redirect) $redirect = ",$redirect"; $p->code = "generer_action_auteur($script,$args$redirect)"; } $p->interdire_scripts = false; 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; }
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_BLOC_UNIQUE($p) { $arg = interprete_argument_balise(1, $p); $p->code = "bloc_unique_script($arg)"; $p->interdire_scripts = false; return $p; }
function balise_URL_ACTION_AUTEUR_dist($p) { $p->descr['session'] = true; $p->code = interprete_argument_balise(1, $p); $args = interprete_argument_balise(2, $p); if ($args != "''" && $args !== NULL) { $p->code .= "," . $args; } $redirect = interprete_argument_balise(3, $p); if ($redirect != "''" && $redirect !== NULL) { $p->code .= "," . $redirect; } $p->code = "generer_action_auteur(" . $p->code . ")"; $p->interdire_scripts = false; return $p; }
/** * Balise indiquant une configuration crayonnable * * @example * ``` * <div class="#EDIT_CONFIG{descriptif_site}">#DESCRIPTIF_SITE_SPIP</div> * <div class="#EDIT_CONFIG{demo/truc}">#CONFIG{demo/truc}</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_CONFIG_dist($p) { // le code compile de ce qui se trouve entre les {} de la balise $config = interprete_argument_balise(1, $p); if (!$config) { return $p; } // chaque / du nom de config doit être transformé pour css. // nous utiliserons '__' à la place. $type = 'meta'; $label = 'valeur'; $p->code = "classe_boucle_crayon('" . $type . "','" . $label . "'," . "str_replace('/', '__', {$config})" . ").' '"; $p->interdire_scripts = false; return $p; }