<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2019                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/


if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

include_spip('inc/autoriser');
include_spip('inc/presentation');

/**
 * Crée l'affichage des listes de rubriques dans le privé
 *
 * @param int $collection
 *  L'identifiant numérique de la rubrique à lister
 * @param int $debut
 *  Le numéro de la pagination si paginé (> 500)
 * @param int $limite
 *  Le pas de pagination si paginé (> 500)
 * @return array $res
 *  Un tableau des sous rubriques
 */
function enfant_rub($collection, $debut = 0, $limite = 500) {
	$voir_logo = (isset($GLOBALS['meta']['image_process']) and $GLOBALS['meta']['image_process'] != 'non');
	$logo = '';

	if ($voir_logo) {
		$chercher_logo = charger_fonction('chercher_logo', 'inc');
		include_spip('inc/filtres_images_mini');
	}

	$res = array();

	$result = sql_select(
		'id_rubrique, id_parent, titre, descriptif, lang',
		'spip_rubriques',
		'id_parent='.intval($collection),
		'',
		'0+titre,titre',
		"$debut,$limite"
	);
	while ($row = sql_fetch($result)) {
		$id_rubrique = $row['id_rubrique'];
		$id_parent = $row['id_parent'];
		// pour etre sur de passer par tous les traitements
		$titre = generer_info_entite($id_rubrique, 'rubrique', 'titre');
		if ('' !== ($rang = recuperer_numero($row['titre']))) {
			$rang = "$rang. ";
		}

		if (autoriser('voir', 'rubrique', $id_rubrique)) {
			$les_sous_enfants = sous_enfant_rub($id_rubrique);

			changer_typo($row['lang']);
			$lang_dir = lang_dir($row['lang']);
			$descriptif = propre($row['descriptif']);

			if ($voir_logo) {
				if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) {
					list($fid, $dir, $nom, $format) = $logo;
					$logo = image_reduire("<img src='$fid' alt='' />", 48, 36);
					if ($logo) {
						$logo = inserer_attribut($logo, 'class', 'logo');
					}
				}
			}

			$lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? '' :
					http_img_pack(
						'auteur-0minirezo-16.png',
						'',
						" width='16' height='16'",
						_T('image_administrer_rubrique')
					)) .
				" <a dir='$lang_dir'" .
				($row['lang'] !== $GLOBALS['spip_lang'] ? " hreflang='" . $row['lang'] . "'" : '') .
				" href='" .
				generer_url_entite($id_rubrique, 'rubrique') .
				"'>" .
				$rang . $titre .
				'</a>';

			$titre = (is_string($logo) ? $logo : '') .
				bouton_block_depliable($lib_bouton, $les_sous_enfants ? false : -1, "enfants$id_rubrique");

			$res[] =
				debut_cadre_sous_rub(($id_parent ? 'rubrique-24.png' : 'secteur-24.png'), true, '', $titre) .
				(!$descriptif ? '' : "\n<div class='descriptif'>$descriptif</div>") .
				$les_sous_enfants .
				fin_cadre_sous_rub(true);
		}
	}

	changer_typo($GLOBALS['spip_lang']); # remettre la typo de l'interface pour la suite
	return $res;
}

/**
 * Affiche les enfants d'une sous rubrique dans un bloc dépliable
 * (Utilisé dans les pages du privé)
 *
 * @param int $collection2
 *  L'identifiant numérique de la rubrique parente
 * @return string
 *  Le contenu du bloc dépliable
 */
function sous_enfant_rub($collection2) {
	$nb = sql_countsel('spip_rubriques', 'id_parent='.intval($collection2));

	$retour = '';
	$pagination = '';
	$debut = 0;
	$limite = 500;

	/**
	 * On ne va afficher que 500 résultats max
	 * Si > 500 on affiche une pagination
	 */
	if ($nb > $limite) {
		$debut = _request('debut_rubrique' . $collection2) ? _request('debut_rubrique' . $collection2) : $debut;
		$pagination = chercher_filtre('pagination');
		$pagination = '<p class="pagination">' . $pagination($nb, '_rubrique' . $collection2, $debut, $limite, true,
				'prive') . '</p>';
		$limite = $debut + $limite;
	}

	$result = sql_select(
		'id_rubrique, id_parent, titre, lang',
		'spip_rubriques',
		'id_parent='.intval($collection2),
		'',
		'0+titre,titre',
		"$debut,$limite"
	);

	while ($row = sql_fetch($result)) {
		$id_rubrique2 = $row['id_rubrique'];
		$titre2 = generer_info_entite(
			$id_rubrique2,
			'rubrique',
			'titre'
		); // pour etre sur de passer par tous les traitements
		if ('' !== ($rang2 = recuperer_numero($row['titre']))) {
			$rang2 = "$rang2. ";
		}

		changer_typo($row['lang']);
		$lang_dir = lang_dir($row['lang']);
		if (autoriser('voir', 'rubrique', $id_rubrique2)) {
			$retour .= "\n<li class='item' dir='$lang_dir'><a href='" . generer_url_entite(
				$id_rubrique2,
				'rubrique'
			) . "'>" . $rang2 . $titre2 . "</a></li>\n";
		}
	}

	$retour = $pagination . $retour . $pagination;

	if (!$retour) {
		return '';
	}

	return debut_block_depliable($debut > 0 ? true : false, "enfants$collection2")
	. "\n<ul class='liste-items sous-sous-rub'>\n"
	. $retour
	. "</ul>\n" . fin_block() . "\n\n";
}

/**
 * Affiche la liste des rubriques enfants d'une rubrique
 * (Utilisé dans les pages du privé notamment ?exec=rubriques)
 *
 * Si plus de 500 rubriques enfants, on pagine par 500 les résultats
 *
 * @param int $id_rubrique
 *  L'identifiant numérique de la rubrique parente (0 par défaut, la racine)
 * @return string $res
 *  Le contenu textuel affiché, la liste des sous rubriques
 */
function afficher_enfant_rub($id_rubrique = 0) {
	$pagination = '';
	$debut = 0;
	$limite = 500;

	$nb = sql_countsel('spip_rubriques', 'id_parent='.intval($id_rubrique));

	if ($nb > $limite) {
		$debut = _request('debut_rubrique' . $id_rubrique) ? _request('debut_rubrique' . $id_rubrique) : $debut;
		$pagination = chercher_filtre('pagination');
		$pagination = '<br class="nettoyeur"><p class="pagination">' .
			$pagination($nb, '_rubrique' . $id_rubrique, $debut, $limite, true, 'prive') .
		'</p>';
	}

	$les_enfants = enfant_rub($id_rubrique, $debut, $limite);

	if (!$n = count($les_enfants)) {
		return '';
	}

	if ($n == 1) {
		$les_enfants = reset($les_enfants);
		$les_enfants2 = '';
	} else {
		$n = ceil($n / 2);
		$les_enfants2 = implode('', array_slice($les_enfants, $n));
		$les_enfants = implode('', array_slice($les_enfants, 0, $n));
	}

	$res =
		$pagination
		. "<div class='gauche'>"
		. $les_enfants
		. '</div>'
		. "<div class='droite'>"
		. $les_enfants2
		. '</div>'
		. $pagination;

	return $res;
}
