Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/jobs/plugins/auto/tri_par_rubrique/ |
<?php /** * Fonctions utiles au plugin Tri des articles par rubrique * * @plugin Tri des articles par rubrique * @copyright 2019 * @author nicod_ * @licence GNU/GPL * @package SPIP\Tri_par_rubrique\Fonctions */ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Génère la liste des critères de tri d'article utilisables sur les rubriques * * @return array */ function filtre_tri_par_rubrique_criteres_dist($id_rubrique) { $criteres = array( 'date' => _T('tri_par_rubrique:tri_articles_date'), 'maj' => _T('tri_par_rubrique:tri_articles_maj'), 'titre' => _T('tri_par_rubrique:tri_articles_titre'), 'num titre' => _T('tri_par_rubrique:tri_articles_num_titre'), 'id_article' => _T('tri_par_rubrique:tri_articles_id_article'), ); // pour les rubriques, proposer le choix "Configuration par défaut" $config_defaut = lire_config('tri_par_rubrique', array()); if (isset($config_defaut['trirub_articles']) && $id_rubrique) { $label = _T('tri_par_rubrique:tri_articles_defaut') . ' (' . _T('tri_par_rubrique:tri_articles_' . $config_defaut['trirub_articles']) . ($config_defaut['trirub_articles_inverse'] ? ' - ' . _T('tri_par_rubrique:tri_articles_inverse') : '') . ')'; $criteres = array_merge(array('defaut' => $label), $criteres); } if ( test_plugin_actif('rang') and function_exists('rang_liste_objets') and in_array('articles', rang_liste_objets()) ) { $criteres['rang'] = _T('tri_par_rubrique:tri_articles_rang'); } foreach ($criteres as $key => $value) { $criteres[ $key ] = _T('tri_par_rubrique:tri_articles_par') . ' ' . $value; } return $criteres; } /** * Critère tri_rubrique, qui affiche les articles selon le tri défini sur la rubrique dans l'espace privé * * @param $idb * @param $boucles * @param $crit * * @return void */ function critere_tri_rubrique_dist($idb, &$boucles, $crit) { $boucle = &$boucles[ $idb ]; // Uniquement les boucles articles sont concernées par le critère de tri. if ($boucle->id_table != 'articles') { return array('zbug_tri_rubrique_sur_articles_uniquement'); } // Existence d'un collate ou pas $collecte = ''; if (isset($boucle->modificateur['collate'])) { $collecte = $boucle->modificateur['collate']; } // Détermination du tri configuré pour la rubrique ou globalement par défaut si aucun id_rubrique dans l'environnement $boucle->order[] = 'calculer_tri_rubrique($Pile, (isset($collecte) ? $collecte : ""))'; } function calculer_tri_rubrique($Pile, $collecte = '') { // chercher l'id_rubrique dans le contexte do { $depile = array_pop($Pile); $id_rubrique = isset($depile['id_rubrique']) ? $depile['id_rubrique'] : null; } while(!$id_rubrique && !empty($Pile)); // On construit l'expression de tri. $tri = tri_rubrique_champ(intval($id_rubrique)); // cas spécial "par num titre" if($tri == 'num titre'){ $tri = '0+titre'; } $sens = tri_rubrique_sens($id_rubrique) ? 'DESC' : 'ASC'; return "$tri $collecte $sens"; } function tri_rubrique_champ($id_rubrique) { static $cache; if(isset($cache[$id_rubrique])){ return $cache[$id_rubrique]; } // On initialise le champ à vide. $champ = ''; if ($id = intval($id_rubrique)) { // On a bien un id_rubrique dans l'environnement $champ = sql_getfetsel('trirub_articles', 'spip_rubriques', 'id_rubrique=' . $id); } if (!$champ) { // Pas d'id_rubrique ou pas de valeur pour la rubrique, on se rabat sur la config globale include_spip('inc/config'); $champ = lire_config('tri_par_rubrique/trirub_articles'); } $cache[$id_rubrique] = $champ; return $champ; } function tri_rubrique_sens($id_rubrique) { static $cache; if(isset($cache[$id_rubrique])){ return $cache[$id_rubrique]; } // On initialise la variable à false pour la distinguer de 0. $inverse = false; if ($id = intval($id_rubrique)) { if(sql_getfetsel('trirub_articles', 'spip_rubriques', 'id_rubrique=' . $id)) { $inverse = sql_getfetsel('trirub_articles_inverse', 'spip_rubriques', 'id_rubrique=' . $id); } else { // Si pas de valeur de tri pour la rubrique, on se rabat sur la config globale include_spip('inc/config'); $inverse = lire_config('tri_par_rubrique/trirub_articles_inverse'); } } $cache[$id_rubrique] = $inverse; return $inverse; }