[SPIP] +spip v3.0.17
[lhc/web/clavette_www.git] / www / plugins-dist / svp / svp_pipelines.php
diff --git a/www/plugins-dist/svp/svp_pipelines.php b/www/plugins-dist/svp/svp_pipelines.php
new file mode 100644 (file)
index 0000000..50a76f8
--- /dev/null
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Déclarations d'autorisations et utilisations de pipelines
+ * 
+ * @plugin SVP pour SPIP
+ * @license GPL
+ * @package SPIP\SVP\Pipelines
+**/
+
+/**
+ * Fonction du pipeline autoriser. N'a rien à faire
+ * @pipeline autoriser
+ */
+function svp_autoriser(){}
+
+/**
+ * Autoriser l'iconification (mettre un logo) d'un dépot
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+ */
+function autoriser_depot_iconifier_dist($faire, $type, $id, $qui, $opt){
+       return true;
+}
+
+
+/**
+ * Autoriser l'ajout d'un plugin ou d'un dépôt
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+ */
+function autoriser_plugins_ajouter_dist($faire, $type, $id, $qui, $opt){
+       if (!defined('_AUTORISER_TELECHARGER_PLUGINS'))
+               define('_AUTORISER_TELECHARGER_PLUGINS', true);
+       return _AUTORISER_TELECHARGER_PLUGINS AND autoriser('webmestre');
+}
+
+
+/**
+ * Ajout de l'onglet 'Ajouter les plugins'
+ *
+ * L'URL dépend de l'existence ou pas d'un dépot de plugins.
+ * En absence, on amène sur la page permettant de créer un premier dépot.
+ *
+ * @pipeline ajouter_onglets
+ * @param array $flux Données du pipeline
+ * @return array      Données du pipeline
+ */
+function svp_ajouter_onglets($flux){
+       if (($flux['args']=='plugins')
+       AND (autoriser('ajouter', '_plugins'))){
+               $compteurs = svp_compter('depot');
+               $page = ($compteurs['depot'] == 0) ? 'depots' : 'charger_plugin';
+               $flux['data']['charger_plugin'] =
+                       new Bouton(
+                               find_in_theme('images/plugin-add-24.png'),
+                               'plugin_titre_automatique_ajouter',
+                               generer_url_ecrire($page));
+       }
+       return $flux;
+}
+
+
+/**
+ * Ne pas afficher par défaut les paquets,dépots,plugins locaux dans les boucles
+ * 
+ * On n'affiche dans les boucles (PLUGINS) (DEPOTS) et (PAQUETS)
+ * que les éléments distants par défaut (on cache les locaux).
+ * 
+ * Utiliser {tout} pour tout avoir.
+ * Utiliser {tout}{id_depot=0} pour avoir les plugins ou paquets locaux.
+ *
+ * @pipeline pre_boucle
+ * @param Boucle $boucle Description de la boucle
+ * @return Boucle        Description de la boucle
+**/
+function svp_pre_boucle($boucle) {
+
+       // DEPOTS, PAQUETS
+       // Pour DEPOTS, on n'a jamais id_depot=0 dedans... donc... pas la peine.
+       if (
+               $boucle->type_requete == 'paquets'
+               # OR $boucle->type_requete == 'depots'
+       ) {
+               $id_table = $boucle->id_table;
+               $m_id_depot = $id_table .'.id_depot';
+               // Restreindre aux depots distants
+               if (
+                       #!isset($boucle->modificateur['criteres']['id_depot']) && 
+                       !isset($boucle->modificateur['tout'])) {
+                               $boucle->where[] = array("'>'", "'$m_id_depot'", "'\"0\"'");
+               }
+       }
+       // PLUGINS
+       elseif ($boucle->type_requete == 'plugins') {
+               $id_table = $boucle->id_table;
+               /*
+               // les modificateurs ne se creent que sur les champs de la table principale
+               // pas sur une jointure, il faut donc analyser les criteres passes pour
+               // savoir si l'un deux est un 'id_depot'...
+
+               $id_depot = false;
+               foreach($boucle->criteres as $c){
+                       if (($c->op == 'id_depot') // {id_depot} ou {id_depot?}
+                       OR ($c->param[0][0]->texte == 'id_depot')) // {id_depot=x}
+                       {
+                               $id_depot = true;
+                               break;
+                       }
+               }
+               */
+               if (
+               #       !$id_depot && 
+                       !isset($boucle->modificateur['tout'])) {
+                               // Restreindre aux plugins distant (id_depot > 0)
+                               $boucle->from["depots_plugins"] =  "spip_depots_plugins";
+                               $boucle->where[] = array("'='", "'depots_plugins.id_plugin'", "'$id_table.id_plugin'");
+                               $boucle->where[] = array("'>'", "'depots_plugins.id_depot'", "'\"0\"'");
+               }
+       }
+
+       return $boucle;
+
+}
+?>