Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #6
0
function balise_CFG_ARBO($p)
{
    if (!($arg = interprete_argument_balise(1, $p))) {
        $arg = "''";
    }
    $p->interdire_scripts = false;
    $p->code = 'affiche_arborescence(' . $arg . ')';
    return $p;
}
Example #7
0
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;
}
Example #8
0
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;
}
Example #9
0
/**
 * #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;
}
Example #10
0
/**
 * #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;
}
Example #12
0
/**
 * 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;
}
Example #14
0
/**
 * #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;
}
Example #15
0
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>&nbsp;</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;
}
Example #16
0
/**
 * #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;
}
Example #17
0
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("&amp;", "&", ' . $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;
}
Example #18
0
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;
}
Example #20
0
/**
 * 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;
}
Example #22
0
	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;
	}
Example #23
0
	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;
	}
Example #24
0
/**
 * 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;
}
Example #25
0
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;
}
Example #26
0
/**
 * 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;
}
Example #27
0
	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;
	}
Example #28
0
function balise_BLOC_UNIQUE($p) {
	$arg = interprete_argument_balise(1, $p);
	$p->code = "bloc_unique_script($arg)";
	$p->interdire_scripts = false;
	return $p;
}
Example #29
0
File: url_.php Project: nursit/SPIP
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;
}