Ce pipeline permet de compléter ou de modifier le comptage des enfants d’un objet.
Il est appelé comme ceci dans le fichier ecrire/inc/rubriques.php :
// On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants
$compte = pipeline('objet_compte_enfants',
array(
'args' => array(
'objet' => 'rubrique',
'id_objet' => $id_rubrique,
'statut' => 'publie',
'date' => $date
),
'data' => $compte
)
);
Il reçoit comme arguments l’objet dont on veut compter les enfants grâce à objet
et id_objet
. Il peut aussi recevoir la date ainsi que le statut des enfants que l’on veut compter.
Dans l’appel précédent, on demande donc à compter les enfants publiés d’une rubrique donnée.
Le contenu data
du pipeline est un tableau associatif, dans lequel la clé est le type d’un objet au pluriel (par exemple : « articles »), et la valeur est un nombre entier, correspondant au nombre d’enfants de ce type.
Exemple
Le plugin « Devis » compte comme enfants d’une rubrique les objets "devis" seulement lorsqu’ils sont publiés, ou bien tous ceux qui ne sont pas à la poubelle, selon que l’argument ’statut’ passé au pipeline vaut ’publie’ ou non :
/**
* Compter les enfants d'un objet
*
* @pipeline objets_compte_enfants
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function devis_objet_compte_enfants($flux) {
if ($flux['args']['objet'] == 'rubrique' and $id_rubrique = intval($flux['args']['id_objet'])) {
// juste les publiés ?
if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
$flux['data']['devis'] = sql_countsel('spip_devis', 'id_rubrique= ' . intval($id_rubrique) . " AND (statut = 'publie')");
} else {
$flux['data']['devis'] = sql_countsel('spip_devis', 'id_rubrique= ' . intval($id_rubrique) . " AND (statut <> 'poubelle')");
}
}
return $flux;
}
Le plugin « Polyhiérarchie » ajoute aux rubriques le comptage des enfants indirects :
function polyhier_objet_compte_enfants($flux) {
if ($flux['args']['objet']=='rubrique'){
$statut = (isset($flux['args']['statut'])?" AND A.statut=".sql_quote($flux['args']['statut']):"");
$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
" AND A.date <= ".sql_quote(date('Y-m-d H:i:s')) : '';
$flux['data']['articles_indirects']+= sql_countsel(
"spip_rubriques_liens as RL join spip_articles as A ON (RL.objet='article' AND RL.id_objet=A.id_article)",
'RL.id_parent='.$flux['args']['id_objet'].$statut.$postdates);
$statut = (isset($flux['args']['statut'])?" AND R.statut=".sql_quote($flux['args']['statut']):"");
$flux['data']['rubriques_indirectes']+= sql_countsel(
"spip_rubriques_liens as RL join spip_rubriques as R ON (RL.objet='rubrique' AND RL.id_objet=R.id_rubrique)",
'RL.id_parent='.$flux['args']['id_objet'].$statut);
}
return $flux;
}