/** * 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; }
/** * 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; }
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); }
/** * 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; }