Proposer une amélioration de commentaire

Le commentaire à poster est au format «docblock» (de phpDoc) qui peut être enrichi de tags spécifiques pour SPIP.
Fichier
ecrire/inc/rubriques.php
Fonction
inc_calcul_hierarchie_in_dist

    Nom ou pseudo de l'auteur de la proposition

Code original

/**
 * Calcul d'une hiérarchie
 *
 * Liste des id_rubrique contenant une rubrique donnée,
 * contrairement à la fonction calcul_branche_in() qui calcule les
 * rubriques contenues
 *
 * @see inc_calcul_branche_in_dist() pour la descendence
 *
 * @param string|int|array $id
 *     Identifiant de la, ou des rubriques dont on veut obtenir les hierarchies
 * @param bool $tout
 *     inclure la rubrique de depart dans la hierarchie ou non
 * @return string
 *     Liste des identifiants séparés par des virgules,
 *     incluant les rubriques transmises et toutes leurs parentées
 */
function inc_calcul_hierarchie_in_dist($id, $tout = true) {
	static $b = array();
 
	// normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
	if (!is_array($id)) {
		$id = explode(',', $id);
	}
	$id = join(',', array_map('intval', $id));
 
	if (isset($b[$id])) {
		// Notre branche commence par la rubrique de depart si $tout=true
		return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id];
	}
 
	$hier = "";
 
	// On ajoute une generation (les filles de la generation precedente)
	// jusqu'a epuisement, en se protegeant des references circulaires
	$ids_nouveaux_parents = $id;
	$maxiter = 10000;
	while ($maxiter-- and $parents = sql_allfetsel(
			'id_parent',
			'spip_rubriques',
			sql_in('id_rubrique', $ids_nouveaux_parents) . " AND " . sql_in('id_parent', $hier, 'NOT')
		)) {
		$ids_nouveaux_parents = join(',', array_map('reset', $parents));
		$hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : '');
	}
 
	# securite pour ne pas plomber la conso memoire sur les sites prolifiques
	if (strlen($hier) < 10000) {
		$b[$id] = $hier;
	}
 
	// Notre branche commence par la rubrique de depart si $tout=true
	$hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier;
 
	return $hier;
}

Le commentaire au format « docblock » peut être complété des éléments suivants sécifiques
à SPIP.

Sur un entête de fichier :

  • @package SPIP\Core\x (pour un fichier du core, x dépendant du fichier)
  • @package SPIP\Nom\x (pour un fichier de plugin, Nom étant le nom du plugin)

Sur un entête de fonction :

  • @pipeline x : indique que la fonction est une utilisation d’un pipeline
  • @pipeline_appel x : indique que la fonction appelle le pipeline indiqué
  • @balise : indique que la fonction est une compilation de balise
  • @filtre : indique un |filtre
  • @critere : indique que la fonction est une compilaiton de critère
  • @boucle : indique que la fonction est une compilaiton de boucle
Vous inscrire sur ce site

L’espace privé de ce site est ouvert aux visiteurs, après inscription. Une fois enregistré, vous pourrez consulter les articles en cours de rédaction, proposer des articles et participer à tous les forums.

Identifiants personnels

Indiquez ici votre nom et votre adresse email. Votre identifiant personnel vous parviendra rapidement, par courrier électronique.