示例#1
0
/**
 * liste des rubriques contenues dans une zone, directement ou par heritage.
 *
 * @param int/string $id_zone
 * @return array
 */
function accesrestreint_liste_contenu_zone_rub($id_zone){
	include_spip('inc/rubriques');
	$liste_rubriques = accesrestreint_liste_contenu_zone_rub_direct($id_zone);
	if (!count($liste_rubriques))
		return $liste_rubriques;
	$liste_rubriques = calcul_branche_in(join(',',$liste_rubriques));
	if (!strlen($liste_rubriques))
		return array();
	$liste_rubriques = explode(',',$liste_rubriques);
	return $liste_rubriques;
}
示例#2
0
文件: autoriser.php 项目: JLuc/SPIP
/**
 * Liste les rubriques d'un auteur
 *
 * Renvoie la liste des rubriques liées à cet auteur, independamment de son
 * statut (pour les admins restreints, il faut donc aussi vérifier statut)
 *
 * Mémorise le resultat dans un tableau statique indéxé par les id_auteur.
 * On peut reinitialiser un élément en passant un 2e argument non vide
 * 
 * @param int  $id_auteur Identifiant de l'auteur
 * @param bool $raz       Recalculer le résultat connu pour cet auteur
 * @return array          Liste des rubriques
**/
function liste_rubriques_auteur($id_auteur, $raz = false)
{
    static $restreint = array();
    if (!($id_auteur = intval($id_auteur))) {
        return array();
    }
    if ($raz) {
        unset($restreint[$id_auteur]);
    } elseif (isset($restreint[$id_auteur])) {
        return $restreint[$id_auteur];
    }
    $rubriques = array();
    if ((!isset($GLOBALS['meta']['version_installee']) or $GLOBALS['meta']['version_installee'] > 16428) and $r = sql_allfetsel('id_objet', 'spip_auteurs_liens', "id_auteur=" . intval($id_auteur) . " AND objet='rubrique' AND id_objet!=0") and count($r)) {
        $r = array_map('reset', $r);
        // recuperer toute la branche, au format chaine enumeration
        include_spip('inc/rubriques');
        $r = calcul_branche_in($r);
        $r = explode(',', $r);
        // passer les rubriques en index, elimine les doublons
        $r = array_flip($r);
        // recuperer les index seuls
        $r = array_keys($r);
        // combiner pour avoir un tableau id_rubrique=>id_rubrique
        // est-ce vraiment utile ? (on preserve la forme donnee par le code precedent)
        $rubriques = array_combine($r, $r);
    }
    // Affecter l'auteur session le cas echeant
    if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur) {
        $GLOBALS['visiteur_session']['restreint'] = $rubriques;
    }
    return $restreint[$id_auteur] = $rubriques;
}
示例#3
0
function exec_rechercher_args($id, $type, $exclus, $rac, $do)
{
    if (!$do) {
        $do = 'aff';
    }
    $where = preg_split(",\\s+,", $type);
    if ($where) {
        foreach ($where as $k => $v) {
            $where[$k] = "'%" . substr(str_replace("%", "\\%", sql_quote($v)), 1, -1) . "%'";
        }
        $where_titre = "(titre LIKE " . join(" AND titre LIKE ", $where) . ")";
        $where_desc = "(descriptif LIKE " . join(" AND descriptif LIKE ", $where) . ")";
        $where_id = "(id_rubrique = " . join(" AND id_rubrique = ", $where) . ")";
    } else {
        $where_titre = " 1=2";
        $where_desc = " 1=2";
        $where_id = " 1=2";
    }
    if ($exclus) {
        include_spip('inc/rubriques');
        $where_exclus = " AND " . sql_in('id_rubrique', calcul_branche_in($exclus), 'NOT');
    } else {
        $where_exclus = '';
    }
    $res = sql_select("id_rubrique, id_parent, titre", "spip_rubriques", "{$where_id}{$where_exclus}");
    $points = $rub = array();
    while ($row = sql_fetch($res)) {
        $id_rubrique = $row["id_rubrique"];
        $rub[$id_rubrique]["titre"] = typo($row["titre"]);
        $rub[$id_rubrique]["id_parent"] = $row["id_parent"];
        $points[$id_rubrique] = $points[$id_rubrique] + 3;
    }
    $res = sql_select("id_rubrique, id_parent, titre", "spip_rubriques", "{$where_titre}{$where_exclus}");
    while ($row = sql_fetch($res)) {
        $id_rubrique = $row["id_rubrique"];
        $rub[$id_rubrique]["titre"] = typo($row["titre"]);
        $rub[$id_rubrique]["id_parent"] = $row["id_parent"];
        if (isset($points[$id_rubrique])) {
            $points[$id_rubrique] += 2;
        } else {
            $points[$id_rubrique] = 0;
        }
    }
    $res = sql_select("id_rubrique, id_parent, titre", "spip_rubriques", "{$where_desc}{$where_exclus}");
    while ($row = sql_fetch($res)) {
        $id_rubrique = $row["id_rubrique"];
        $rub[$id_rubrique]["titre"] = typo($row["titre"]);
        $rub[$id_rubrique]["id_parent"] = $row["id_parent"];
        if (isset($points[$id_rubrique])) {
            $points[$id_rubrique] += 1;
        } else {
            $points[$id_rubrique] = 0;
        }
    }
    if ($points) {
        arsort($points);
        $style = " style='background-image: url(" . chemin_image('secteur-12.png') . ")'";
        foreach ($rub as $k => $v) {
            $rub[$k]['atts'] = ($v["id_parent"] ? $style : '') . " class='petite-rubrique'";
        }
    }
    return proposer_item($points, $rub, $rac, $type, $do);
}
示例#4
0
/**
 * Calcule une branche de rubriques
 * 
 * Dépréciée, pour compatibilité
 *
 * @deprecated
 * @see calcul_branche_in()
 * 
 * @param string|int|array $generation
 * @return string
 */
function calcul_branche($generation)
{
    return calcul_branche_in($generation);
}
/**
 * Instituer une rubrique (changer son parent)
 *
 * Change le parent d'une rubrique, si les autorisations sont correctes,
 * mais n'accèpte pas de déplacer une rubrique dans une de ses filles, tout de même !
 *
 * Recalcule les secteurs, les langues et déplace les brèves au passage.
 *
 * @param int $id_rubrique
 *     Identifiant de la rubrique à instituer
 * @param array $c
 *     Informations pour l'institution (id_rubrique, confirme_deplace)
 * @global array $GLOBALS ['visiteur_session']
 * @return string
 *     Chaîne vide : aucune erreur
 *     Chaîne : Texte du message d'erreur
 */
function rubrique_instituer($id_rubrique, $c)
{
    // traitement de la rubrique parente
    // interdiction de deplacer vers ou a partir d'une rubrique
    // qu'on n'administre pas.
    if (null !== ($id_parent = $c['id_parent'])) {
        $id_parent = intval($id_parent);
        $filles = calcul_branche_in($id_rubrique);
        if (strpos(",{$id_parent},", ",{$filles},") !== false) {
            spip_log("La rubrique {$id_rubrique} ne peut etre fille de sa descendante {$id_parent}");
        } else {
            $s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique={$id_rubrique}");
            $old_parent = $s['id_parent'];
            if (!($id_parent != $old_parent and autoriser('publierdans', 'rubrique', $id_parent) and autoriser('creerrubriquedans', 'rubrique', $id_parent) and autoriser('publierdans', 'rubrique', $old_parent))) {
                if ($s['statut'] != 'new') {
                    spip_log("deplacement de {$id_rubrique} vers {$id_parent} refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' ' . $GLOBALS['visiteur_session']['statut']);
                }
            } elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) {
                $statut_ancien = $s['statut'];
                sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique={$id_rubrique}");
                propager_les_secteurs();
                // Deplacement d'une rubrique publiee ==> chgt general de leur statut
                if ($statut_ancien == 'publie') {
                    calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien);
                } elseif (!$statut_ancien || $old_parent != $id_parent) {
                    effacer_meta("date_calcul_rubriques");
                }
                calculer_langues_rubriques();
            }
        }
    }
    return '';
    // pas d'erreur
}
/**
 * Retourne la liste de toutes les rubriques sélectionnées dans des zones 
 *
 * @example
 *   accesrestreint_liste_rubriques_restreintes_et_enfants(false)
 *   retourne les id des rubriques et leurs enfants restreints 
 *   dans le privé
 *   
 *   accesrestreint_liste_rubriques_restreintes_et_enfants(true)
 *   retourne les id des rubriques et leurs enfants restreints 
 *   dans le public
 *   
 *   accesrestreint_liste_rubriques_restreintes_et_enfants('tout')
 *   retourne les id des rubriques et leurs enfants restreints 
 *   dans le privé et dans le public
 *
 * @param null|bool|string $_publique
 *   Sélectionner les rubriques
 *   cachées dans le public (true),
 *   le privé (false),
 *   selon le contexte privé ou public (null),
 *   cachées ou non quelque soit le contexte ('tout')
 * @return Array liste d'identifiants de rubriques
 */
function accesrestreint_liste_rubriques_restreintes_et_enfants($_publique = null)
{
    static $rubs = array();
    if (is_null($_publique)) {
        $_publique = !test_espace_prive();
    }
    if (isset($rubs[$_publique])) {
        return $rubs[$_publique];
    }
    $parents = accesrestreint_liste_rubriques_restreintes($_publique);
    if ($parents) {
        include_spip('inc/rubriques');
        $branches = explode(',', calcul_branche_in($parents));
        return $rubs[$_publique] = $branches;
    }
    return $rubs[$_publique] = array();
}
function BOUCLE_articles_rubriquehtml_8bf8bdc0aa13e79e11d908f1699ff96f(&$Cache, &$Pile, &$doublons, &$Numrows, $SP)
{
    static $command = array();
    static $connect;
    $command['connect'] = $connect = '';
    $command['pagination'] = array(isset($Pile[0]['debut_articles_rubrique']) ? $Pile[0]['debut_articles_rubrique'] : null, 10);
    if (!isset($command['table'])) {
        $command['table'] = 'articles';
        $command['id'] = '_articles_rubrique';
        $command['from'] = array('articles' => 'spip_articles');
        $command['type'] = array();
        $command['groupby'] = array();
        $command['select'] = array("articles.id_rubrique", "0+articles.titre AS num", "articles.date", "articles.id_article", "articles.surtitre", "articles.descriptif", "articles.titre", "articles.soustitre", "articles.chapo", "articles.texte", "articles.lang");
        $command['orderby'] = array('num', 'articles.date DESC');
        $command['join'] = array();
        $command['limit'] = '';
        $command['having'] = array();
    }
    $command['where'] = array(quete_condition_statut('articles.statut', 'publie,prop,prepa/auteur', 'publie', ''), sql_in('articles.id_rubrique', calcul_branche_in(sql_quote(@$Pile[0]['id_rubrique']))));
    if (defined("_BOUCLE_PROFILER")) {
        $timer = time() + microtime();
    }
    $t0 = "";
    // REQUETE
    $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-rub-articles.html', 'html_8bf8bdc0aa13e79e11d908f1699ff96f', '_articles_rubrique', 1, $GLOBALS['spip_lang']));
    if (!$iter->err()) {
        // COMPTEUR
        $Numrows['_articles_rubrique']['compteur_boucle'] = 0;
        $Numrows['_articles_rubrique']['total'] = @intval($iter->count());
        $debut_boucle = isset($Pile[0]['debut_articles_rubrique']) ? $Pile[0]['debut_articles_rubrique'] : _request('debut_articles_rubrique');
        if (substr($debut_boucle, 0, 1) == '@') {
            $debut_boucle = $Pile[0]['debut_articles_rubrique'] = quete_debut_pagination('id_article', $Pile[0]['@id_article'] = substr($debut_boucle, 1), 10, $iter);
            $iter->seek(0);
        }
        $debut_boucle = intval($debut_boucle);
        $debut_boucle = ($tout = $debut_boucle == -1) ? 0 : $debut_boucle;
        $debut_boucle = max(0, min($debut_boucle, floor(($Numrows['_articles_rubrique']['total'] - 1) / 10) * 10));
        $debut_boucle = intval($debut_boucle);
        $fin_boucle = min($tout ? $Numrows['_articles_rubrique']['total'] : $debut_boucle + 9, $Numrows['_articles_rubrique']['total'] - 1);
        $Numrows['_articles_rubrique']['grand_total'] = $Numrows['_articles_rubrique']['total'];
        $Numrows['_articles_rubrique']["total"] = max(0, $fin_boucle - $debut_boucle + 1);
        if ($debut_boucle > 0 and $debut_boucle < $Numrows['_articles_rubrique']['grand_total'] and $iter->seek($debut_boucle, 'continue')) {
            $Numrows['_articles_rubrique']['compteur_boucle'] = $debut_boucle;
        }
        lang_select($GLOBALS['spip_lang']);
        $SP++;
        // RESULTATS
        while ($Pile[$SP] = $iter->fetch()) {
            $Numrows['_articles_rubrique']['compteur_boucle']++;
            if ($Numrows['_articles_rubrique']['compteur_boucle'] <= $debut_boucle) {
                continue;
            }
            if ($Numrows['_articles_rubrique']['compteur_boucle'] - 1 > $fin_boucle) {
                break;
            }
            lang_select_public($Pile[$SP]['lang'], '', $Pile[$SP]['titre']);
            $t0 .= '
			<br class="nettoyeur" />
			' . (($t1 = strval(filtrer('image_graver', filtrer('image_reduire', strlen($logo = !is_array($l = quete_logo('id_article', 'ON', $Pile[$SP]['id_article'], '', 0)) ? '' : "<img class=\"spip_logo spip_logos\" alt=\"\" src=\"{$l['0']}\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src='{$l['1']}'\" onmouseout=\"this.src='{$l['0']}'\"" : "") . ' />') ? '<a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '">' . $logo . '</a>' : '', '120', '0')))) !== '' ? '<div class="logo-liste-art">
				' . $t1 . '
			</div>' : '') . '
			' . (($t1 = strval(interdire_scripts(typo($Pile[$SP]['surtitre'], "TYPO", $connect, $Pile[0])))) !== '' ? '<div class="surtitre">' . $t1 . '</div>' : '') . '
			<h3>
			<a href="' . spip_htmlspecialchars(sinon($GLOBALS['meta']['adresse_site'], '.')) . '/' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '" ' . (($t1 = strval(interdire_scripts(entites_html(textebrut(propre($Pile[$SP]['descriptif'], $connect, $Pile[0])))))) !== '' ? 'title="' . $t1 . '"' : '') . '>' . interdire_scripts(supprimer_numero(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))) . '</a>
			' . BOUCLE_articles_rubrique_nomhtml_8bf8bdc0aa13e79e11d908f1699ff96f($Cache, $Pile, $doublons, $Numrows, $SP) . '
			</h3>
      	' . (($t1 = strval(interdire_scripts(typo($Pile[$SP]['soustitre'], "TYPO", $connect, $Pile[0])))) !== '' ? '<div class="sous-titre">' . $t1 . '</div>' : '') . '
		<div class="detail">
			' . (($t1 = strval(interdire_scripts(nom_jour(normaliser_date($Pile[$SP]['date']))))) !== '' ? '<span class="date">' . $t1 : '') . ' ' . (($t1 = strval(interdire_scripts(affdate(normaliser_date($Pile[$SP]['date']))))) !== '' ? $t1 . '</span>' : '') . ' 
			' . (($t1 = strval(recuperer_fond('modeles/lesauteurs', array('objet' => 'article', 'id_objet' => $Pile[$SP]['id_article'], 'id_article' => $Pile[$SP]['id_article']), array('trim' => true, 'compil' => array('squelettes/inc/inc-rub-articles.html', 'html_8bf8bdc0aa13e79e11d908f1699ff96f', '_articles_rubrique', 17, $GLOBALS['spip_lang'])), ''))) !== '' ? '<span class="auteurs">' . _T('public|spip|ecrire:par_auteur') . ' ' . $t1 . '</span>' : '') . '				
		</div><!-- detail -->
      <div class="texte">
	' . (($t1 = strval(interdire_scripts(filtrer('image_graver', filtrer('image_reduire', propre($Pile[$SP]['descriptif'], $connect, $Pile[0]), '552', '0')) ? (($t2 = strval(interdire_scripts(filtrer('image_graver', filtrer('image_reduire', propre($Pile[$SP]['descriptif'], $connect, $Pile[0]), '552', '0'))))) !== '' ? '<div class="">' . $t2 . ('</div>
		<div class="suite"><a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '" title="...' . _T('public|spip|ecrire:suite') . ' : ' . interdire_scripts(attribut_html(supprimer_numero(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))) . '" >' . _T('public|spip|ecrire:suite') . '</a></div>') : '') . '
		' : interdire_scripts(propre($Pile[$SP]['chapo'], $connect, $Pile[0]) ? (($t3 = strval(interdire_scripts(filtrer('image_graver', filtrer('image_reduire', propre($Pile[$SP]['chapo'], $connect, $Pile[0]), '552', '0'))))) !== '' ? '<div class="">' . $t3 . ('</div>
      	<div class="suite"><a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '" title="...' . _T('public|spip|ecrire:suite') . ' : ' . interdire_scripts(attribut_html(supprimer_numero(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))) . '" >' . _T('public|spip|ecrire:suite') . '</a></div>') : '') . '
      		' : (($t3 = strval(interdire_scripts(couper(propre($Pile[$SP]['texte'], $connect, $Pile[0]), '300')))) !== '' ? '<div class="">' . $t3 . ('</div>
      	<div class="suite"><a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '" title="...' . _T('public|spip|ecrire:suite') . ' : ' . interdire_scripts(attribut_html(supprimer_numero(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))) . '" >' . _T('public|spip|ecrire:suite') . '</a></div>') : '') . '
		') . '
	'))) !== '' ? '<div class="extrait">' . $t1 . '</div><!-- fin extrait -->' : '') . '
      </div><!-- fin texte -->
      <br class="nettoyeur" />
		';
            lang_select();
        }
        lang_select();
        $iter->free();
    }
    if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) {
        spip_log(intval(1000 * $timer) . "ms BOUCLE_articles_rubrique @ squelettes/inc/inc-rub-articles.html", "profiler" . _LOG_AVERTISSEMENT);
    }
    return $t0;
}
function migrer_agenda_where_articles($id_rubrique, $branche = false)
{
    $where = array();
    $where[] = 'statut=' . sql_quote('publie');
    if ($branche) {
        include_spip('inc/rubriques');
        $where[] = sql_in('id_rubrique', calcul_branche_in($id_rubrique));
    } else {
        $where[] = 'id_rubrique=' . intval($id_rubrique);
    }
    // exclure les articles qui ont deja un evenement
    $where[] = 'id_article NOT IN (' . sql_get_select('id_article', 'spip_evenements') . ')';
    return $where;
}