Ejemplo n.º 1
0
function boucle_COURRIERS ($id_boucle, &$boucles) {
	/*
	$boucle = &$boucles[$id_boucle];
	if(spiplistes_spip_est_inferieur_193()) {
		$id_table = $boucle->id_table;
		$boucle->from[] =  "spip_courriers AS $id_table";
	}
	$boucle->where[] = array("'='","'type'","'\"nl\"'"); 
	return (calculer_boucle($id_boucle, $boucles));
	/**/
	global $table_des_tables;
	$boucle = &$boucles[$id_boucle];
	$id_table = $boucle->id_table;
	$type = $boucle->type_requete;
	$id_table = $table_des_tables[$type];
	if (!$id_table)
	//      table hors SPIP
		$boucle->from[$type] =  $type;
	else {
	// les tables declarees par spip ont un prefixe et un surnom
		$boucle->from[$id_table] =  'spip_' . $type ;
	}
	
	return (calculer_boucle($id_boucle, $boucles));
}
Ejemplo n.º 2
0
function boucle_FORUMS_dist($id_boucle, &$boucles)
{
    $boucle =& $boucles[$id_boucle];
    $id_table = $boucle->id_table;
    // Par defaut, selectionner uniquement les forums sans mere
    // Les criteres {tout} et {plat} inversent ce choix
    // de meme qu'un critere sur {id_forum} ou {id_parent}
    if (!isset($boucle->modificateur['tout']) and !isset($boucle->modificateur['plat']) and !isset($boucle->modificateur['criteres']['id_forum']) and !isset($boucle->modificateur['criteres']['id_parent'])) {
        array_unshift($boucle->where, array("'='", "'{$id_table}." . "id_parent'", 0));
    }
    return calculer_boucle($id_boucle, $boucles);
}
Ejemplo n.º 3
0
/**
 * <BOUCLE(EVENEMENTS)>
 *
 * @param <type> $id_boucle
 * @param <type> $boucles
 * @return <type>
 */
function boucle_EVENEMENTS_dist($id_boucle, &$boucles) {
	$boucle = &$boucles[$id_boucle];
	$id_table = $boucle->id_table;

	if (!isset($boucle->modificateur['criteres']['statut'])) {
		// Restreindre aux elements publies
		// uniquement les evenements d'un article publie
		if (!$GLOBALS['var_preview'])
			if (!isset($boucle->modificateur['lien']) AND !isset($boucle->modificateur['tout'])
			AND (!isset($boucle->lien) OR !$boucle->lien) AND (!isset($boucle->tout) OR !$boucle->tout)) {
				$boucle->from["articles"] =  "spip_articles";
				$boucle->where[]= array("'='", "'articles.id_article'", "'$id_table.id_article'");
				$boucle->where[]= array("'='", "'articles.statut'", "'\"publie\"'");
			}
	}
	return calculer_boucle($id_boucle, $boucles);
}
Ejemplo n.º 4
0
function boucle_HIERARCHIE_dist($id_boucle, &$boucles)
{
    $boucle =& $boucles[$id_boucle];
    $id_table = $boucle->id_table . ".id_rubrique";
    // Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille
    // sauf en presence du critere {tout} (vu par phraser_html)
    // ou {id_article} qui positionne aussi le {tout}
    $boucle->hierarchie = 'if (!($id_rubrique = intval(' . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles) . ")))\n\t\treturn '';\n\t" . "include_spip('inc/rubriques');\n\t" . '$hierarchie = calcul_hierarchie_in($id_rubrique,' . (isset($boucle->modificateur['tout']) ? 'true' : 'false') . ");\n\t" . 'if (!$hierarchie) return "";' . "\n\t";
    $boucle->where[] = array("'IN'", "'{$id_table}'", '"($hierarchie)"');
    $order = "FIELD({$id_table}, \$hierarchie)";
    if (!isset($boucle->default_order[0]) or $boucle->default_order[0] != " DESC") {
        $boucle->default_order[] = "\"{$order}\"";
    } else {
        $boucle->default_order[0] = "\"{$order} DESC\"";
    }
    return calculer_boucle($id_boucle, $boucles);
}
Ejemplo n.º 5
0
function boucle_DOCUMENTS($id_boucle, &$boucles)
{
    $boucle =& $boucles[$id_boucle];
    $id_table = $boucle->id_table;
    // on ne veut pas des fichiers de taille nulle,
    // sauf s'ils sont distants (taille inconnue)
    array_unshift($boucle->where, array("'({$id_table}.taille > 0 OR {$id_table}.distant=\\'oui\\')'"));
    /**
     * N'afficher que les modes de documents que l'on accepte
     * Utiliser le "pipeline medias_documents_visibles" pour en ajouter
     */
    if (!isset($boucle->modificateur['criteres']['mode']) and !isset($boucle->modificateur['tout'])) {
        $modes = pipeline('medias_documents_visibles', array('image', 'document'));
        $f = sql_serveur('quote', $boucle->sql_serveur, true);
        $modes = addslashes(join(',', array_map($f, array_unique($modes))));
        array_unshift($boucle->where, array("'IN'", "'{$id_table}.mode'", "'({$modes})'"));
    }
    return calculer_boucle($id_boucle, $boucles);
}
Ejemplo n.º 6
0
function calculer_boucle_avec_frequence($id_boucle, &$boucles) {
	//compatibilite 1.9.2 et SPIP SVN
	$spip_abstract_fetch = function_exists('spip_abstract_fetch') ? 'spip_abstract_fetch' : 'sql_fetch';
	$boucle = &$boucles[$id_boucle];
	$id_table = $boucle->id_table;
	$boucle->from[$id_table] =  "spip_mots";

	//retenir max_frequence
	$max = '$max_frequence'.$boucle->id_boucle;
	$frequence = '$Pile[$SP][\'frequence'.$boucle->id_boucle.'\']';
	$code_avant = "\n\t" . $max .' = 0;
	$PileTemp = array();';
	$code = "\n\t".'while ($Pile[$SP] = @'.$spip_abstract_fetch.'($result,"")) {' . "\n\t\t" .
		$max.' = max('.$max.', '.$frequence.');' . "\n\t\t" .
		'$PileTemp[] = $Pile[$SP];
	}

	while (list(,$Pile[$SP]) = each($PileTemp)) {';
	$calcul = calculer_boucle($id_boucle, $boucles);
	$calcul = preg_replace(',(\t\/\/ RESULTATS),', '$1'.$code_avant, $calcul);
	$calcul = preg_replace(',(while([^{]*){),', $code, $calcul);
	return $calcul;
}
Ejemplo n.º 7
0
/**
 * Compile une boucle HIERARCHIE
 * 
 * <BOUCLE(HIERARCHIE)>
 *
 * Cette boucle (aliasée sur la table RUBRIQUES)
 * - recherche un id_rubrique dans les boucles parentes,
 * - extrait sa hiérarchie, en prenant ou non la rubrique en cours en fonction du critère {tout}
 * - crée une condition WHERE avec ces identifiants ansi qu'une clause ORDER
 * - compile la boucle.
 *
 * Le code compilé calculant la hierarchie est ajouté au tout début de la
 * fonction de boucle et quitte la boucle si aucune rubrique n'est trouvée.
 *
 * @param string $id_boucle
 *     Identifiant de la boucle
 * @param array $boucles
 *     AST du squelette
 * @return string
 *     Code PHP compilé de la boucle
**/
function boucle_HIERARCHIE_dist($id_boucle, &$boucles)
{
    $boucle =& $boucles[$id_boucle];
    $id_table = $boucle->id_table . ".id_rubrique";
    // Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille
    // sauf en presence du critere {tout} (vu par phraser_html)
    // ou {id_article} qui positionne aussi le {tout}
    $boucle->hierarchie = 'if (!($id_rubrique = intval(' . calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles) . ")))\n\t\treturn '';\n\t" . '$hierarchie = ' . (isset($boucle->modificateur['tout']) ? '",$id_rubrique"' : "''") . ";\n\t" . 'while ($id_rubrique = sql_getfetsel("id_parent","spip_rubriques","id_rubrique=" . $id_rubrique,"","","", "", $connect)) { 
		$hierarchie = ",$id_rubrique$hierarchie";
	}
	if (!$hierarchie) return "";
	$hierarchie = substr($hierarchie,1);';
    $boucle->where[] = array("'IN'", "'{$id_table}'", '"($hierarchie)"');
    $order = "FIELD({$id_table}, \$hierarchie)";
    if (!isset($boucle->default_order[0]) or $boucle->default_order[0] != " DESC") {
        $boucle->default_order[] = "\"{$order}\"";
    } else {
        $boucle->default_order[0] = "\"{$order} DESC\"";
    }
    return calculer_boucle($id_boucle, $boucles);
}
Ejemplo n.º 8
0
/**
 * Calcule la liste des langues réellement utilisées dans le site public
 *
 * La recherche de langue est effectuée en recréant une boucle pour chaque
 * objet éditorial gérant des langues de sorte que les éléments non publiés
 * ne sont pas pris en compte.
 *
 * @param string $serveur
 *    Nom du connecteur à la base de données
 * @return string
 *    Liste des langues utilisées séparées par des virgules
 **/
function calculer_langues_utilisees($serveur = '')
{
    include_spip('public/interfaces');
    include_spip('public/compiler');
    include_spip('public/composer');
    include_spip('public/phraser_html');
    $langues = array();
    $langues[$GLOBALS['meta']['langue_site']] = 1;
    include_spip('base/objets');
    $tables = lister_tables_objets_sql();
    $trouver_table = charger_fonction('trouver_table', 'base');
    foreach (array_keys($tables) as $t) {
        $desc = $trouver_table($t, $serveur);
        // c'est une table avec des langues
        if ($desc['exist'] and isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
            $boucle = new Boucle();
            $boucle->show = $desc;
            $boucle->nom = 'calculer_langues_utilisees';
            $boucle->id_boucle = $desc['table_objet'];
            $boucle->id_table = $desc['table_objet'];
            $boucle->sql_serveur = $serveur;
            $boucle->select[] = "DISTINCT lang";
            $boucle->from[$desc['table_objet']] = $t;
            $boucle->separateur[] = ',';
            $boucle->return = '$Pile[$SP][\'lang\']';
            $boucle->iterateur = 'sql';
            $boucle->descr['nom'] = 'objet_test_si_publie';
            // eviter notice php
            $boucle->descr['sourcefile'] = 'internal';
            $boucle = pipeline('pre_boucle', $boucle);
            if (isset($desc['statut']) and $desc['statut']) {
                $boucles = array('calculer_langues_utilisees' => $boucle);
                // generer un nom de fonction "anonyme" unique
                do {
                    $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . rand();
                } while (function_exists($functionname));
                $code = calculer_boucle('calculer_langues_utilisees', $boucles);
                $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code;
                $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();';
                $res = '';
                eval($code);
                $res = explode(',', $res);
                foreach ($res as $lang) {
                    $langues[$lang] = 1;
                }
            } else {
                $res = sql_select(implode(',', $boucle->select), $boucle->from);
                while ($row = sql_fetch($res)) {
                    $langues[$row['lang']] = 1;
                }
            }
        }
    }
    $langues = array_filter(array_keys($langues));
    sort($langues);
    $langues = join(',', $langues);
    spip_log("langues utilisees: {$langues}");
    return $langues;
}
Ejemplo n.º 9
0
function boucle_SYNDIC_ARTICLES_dist($id_boucle, &$boucles) {
	$boucle = &$boucles[$id_boucle];
	$id_table = $boucle->id_table;
	$mstatut = $id_table .'.statut';

	// Restreindre aux elements publies, sauf critere contraire
	if (isset($boucle->modificateur['criteres']['statut']) AND $boucle->modificateur['criteres']['statut']) {}
	else if ($GLOBALS['var_preview'])
		array_unshift($boucle->where,array("'IN'", "'$mstatut'", "'(\\'publie\\',\\'prop\\')'"));
	else {
		$jointure = array_search("spip_syndic", $boucle->from);
		if (!$jointure) {
			$trouver_table = charger_fonction('trouver_table', 'base');
			$def = $trouver_table('spip_syndic');
			$def = array('spip_syndic', $def);
			$def = array($id_table, $def, 'id_syndic');
			fabrique_jointures($boucle, array($def), true, $boucle->show, $id_table);
			$jointure = array_search('spip_syndic', $boucle->from);
		}
		array_unshift($boucle->where,array("'='", "'$mstatut'", "'\\'publie\\''"));
		$boucle->where[]= array("'='", "'$jointure" . ".statut'", "'\\'publie\\''");

	}
	return calculer_boucle($id_boucle, $boucles);
}