You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
devis/devis_pipelines.php

183 lines
4.8 KiB
PHP

<?php
/**
* Utilisations de pipelines par Devis
*
* @plugin Devis
* @copyright 2018
* @author RastaPopoulos
* @licence GNU/GPL
* @package SPIP\Devis\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Ajouter les objets sur les vues des parents directs
*
* @pipeline affiche_enfants
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function devis_affiche_enfants($flux) {
if ($e = trouver_objet_exec($flux['args']['exec']) and $e['edition'] == false) {
$id_objet = $flux['args']['id_objet'];
if ($e['type'] == 'rubrique') {
$flux['data'] .= recuperer_fond(
'prive/objets/liste/devis',
array(
'titre' => _T('devis:titre_devis_rubrique'),
'id_rubrique' => $id_objet
)
);
if (autoriser('creerdevisdans', 'rubrique', $id_objet)) {
include_spip('inc/presentation');
$flux['data'] .= icone_verticale(
_T('devis:icone_creer_devis'),
generer_url_ecrire('devis_edit', "id_rubrique=$id_objet"),
'devis-24.png',
'new',
'right'
) . "<br class='nettoyeur' />";
}
}
}
return $flux;
}
/**
* Ajout de contenu sur certaines pages,
* notamment des formulaires de liaisons entre objets
*
* @pipeline affiche_milieu
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function devis_affiche_milieu($flux) {
$texte = '';
// auteurs sur les devis
if ($e = trouver_objet_exec($flux['args']['exec']) and !$e['edition'] and in_array($e['type'], array('devis'))) {
$texte .= recuperer_fond('prive/objets/editer/liens', array(
'table_source' => 'auteurs',
'objet' => $e['type'],
'id_objet' => $flux['args'][$e['id_table_objet']]
));
}
if ($texte) {
if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) {
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
} else {
$flux['data'] .= $texte;
}
}
return $flux;
}
/**
* Ajout de liste sur la vue d'un auteur
*
* @pipeline affiche_auteurs_interventions
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function devis_affiche_auteurs_interventions($flux) {
if ($id_auteur = intval($flux['args']['id_auteur'])) {
$flux['data'] .= recuperer_fond('prive/objets/liste/devis', array(
'id_auteur' => $id_auteur,
'titre' => _T('devis:info_devis_auteur')
), array('ajax' => true));
}
return $flux;
}
/**
* Afficher le nombre d'éléments dans les parents
*
* @pipeline boite_infos
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function devis_boite_infos($flux) {
if (isset($flux['args']['type']) and isset($flux['args']['id']) and $id = intval($flux['args']['id'])) {
$texte = '';
if ($flux['args']['type'] == 'rubrique' and $nb = sql_countsel('spip_devis', array("statut='publie'", 'id_rubrique=' . $id))) {
$texte .= '<div>' . singulier_ou_pluriel($nb, 'devis:info_1_devis', 'devis:info_nb_devis') . "</div>\n";
}
if ($texte and $p = strpos($flux['data'], '<!--nb_elements-->')) {
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
}
}
return $flux;
}
/**
* 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 = 'accepte')");
} else {
$flux['data']['devis'] = sql_countsel('spip_devis', 'id_rubrique= ' . intval($id_rubrique) . " AND (statut <> 'poubelle')");
}
}
return $flux;
}
/**
* Optimiser la base de données
*
* Supprime les objets à la poubelle.
*
* @pipeline optimiser_base_disparus
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function devis_optimiser_base_disparus($flux) {
sql_delete('spip_devis', "statut='poubelle' AND maj < " . sql_quote(trim($flux['args']['date'],"'")));
return $flux;
}
/**
* Synchroniser la valeur de id secteur
*
* @pipeline trig_propager_les_secteurs
* @param string $flux Données du pipeline
* @return string Données du pipeline
**/
function devis_trig_propager_les_secteurs($flux) {
// synchroniser spip_devis
$r = sql_select(
'A.id_devis AS id, R.id_secteur AS secteur',
'spip_devis AS A, spip_rubriques AS R',
'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur'
);
while ($row = sql_fetch($r)) {
sql_update('spip_devis', array('id_secteur' => $row['secteur']), 'id_devis=' . $row['id']);
}
return $flux;
}