Esempio n. 1
0
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;
}
/**
 * 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;
}
Esempio n. 3
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;
}
Esempio n. 4
0
function critere_frequence_dist($idb, &$boucles, $crit) {
	global $table_des_tables;
	$not = $crit->not;
	$boucle = &$boucles[$idb];

	if ($not)
		erreur_squelette(_T('zbug_info_erreur_squelette'), $crit->op);

	if (empty($boucle->jointures)) {
		erreur_squelette(_T('zbug_info_erreur_squelette'), _L('frequence sur table sans jointures'));
		return;
	}

	//analyser chaque criteres de frequence
	$nom = $table_des_tables[$boucle->type_requete];
	$parent = $boucles[$idb]->id_parent;
	$criteres = array();
	//Pour l'instant, un seul parametre
	while(list(,$p) = each($crit->param)) {
 		$param = calculer_liste($p, array(), $boucles, $parent);
 		$type = preg_match(',^\(?\'(\w+)(\s*)?([!=<>]+)?(\s*)?,', $param, $regs) ? $regs[1] : $boucle->jointures[0];
		$op = $regs[3] ? $regs[3] : '>=';
		if($val = $regs[0] ? preg_replace(',' . preg_quote($regs[0]) . ',', '', $param) : 0) {
			$val = preg_replace(',\'$,', '', $val);
			$val = preg_replace(',^\'\s\.\s(.*)\)$,Um', '$1', $val);
			$val = $val ? $val : 0;
		}
		//Trouver une jointure n:n (cad table spip_mots_articles)
		if(in_array($_type = $nom.'_'.$type, $boucle->jointures))
			$criteres[] = array($op, $_type, $val);
		else {
			erreur_squelette(_T('zbug_info_erreur_squelette'), _L('frequence '.$type.': jointure inconnue'));
		}
	}
	if(empty($criteres)) $criteres[0] = array('>=', $boucle->jointures[0], 0);
	
	//composer la requete pour la jointure
	$primary = $boucle->primary;
	$id_table = $boucle->id_table . '.' . $primary;
	foreach($criteres as $critere) {
		$frequence = $boucle->modificateur['frequence'] = "frequence".$idb;
		list($op, $type, $val) = $critere;
		//compatibilite SVN et 1.9.2
		if(function_exists('trouver_def_table')) {
			$nom = $table_des_tables[$type];
			list($table, $desc) = trouver_def_table($nom ? $nom : $type, $boucle);
		}
		else {
      $trouver_table = charger_fonction('trouver_table','base');
      $desc=$trouver_table($type, $boucle->sql_serveur);
      $table = $desc['table'];
    }
		/*Ajouter ici un test et produire une erreur si table non trouvee*/
		$ids = $desc['key']['PRIMARY KEY'];
		foreach(split(',', $ids) as $_id)
			if(trim($_id) != $primary) $id = $_id;
		$boucle->select[]= 'COUNT('.$frequence.'.'.$id.') AS '.$frequence;
		$boucle->from[$frequence] = $table;
		$boucle->where[] = array("'='", "'$id_table'", "'$frequence.$primary'");
		$boucle->group[] = $id_table;
		$boucle->having[] = array("'$op'", "'$frequence'", $val);		
	}
}