示例#1
0
/**
 * #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;
}
示例#5
0
文件: info_.php 项目: genma/spip_ynh
/**
 * 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;
    }
}
示例#6
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;
	}
示例#7
0
文件: balises.php 项目: rhertzog/lcs
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;
}
示例#8
0
文件: logo_.php 项目: genma/spip_ynh
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>\':\'\')';
}
示例#9
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;
	}
示例#10
0
 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;
 }
示例#11
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;
}
示例#12
0
/**
 * 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;
}
示例#13
0
文件: url_.php 项目: nursit/SPIP
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;
}
示例#15
0
/**
 * 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;
}
示例#17
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;
	}
示例#18
0
 function balise_THEME_dist($p)
 {
     $p->code = champ_sql('theme', $p, "(defined('NOM_THEME') ? NOM_THEME : '')");
     return $p;
 }
示例#19
0
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;
}
示例#20
0
/**
 * #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;
}
示例#21
0
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;
}
示例#22
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;
}
示例#23
0
/**
 * 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>\':\'\')';
}