svp_pipelines.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /**
  3. * Déclarations d'autorisations et utilisations de pipelines
  4. *
  5. * @plugin SVP pour SPIP
  6. * @license GPL
  7. * @package SPIP\SVP\Pipelines
  8. **/
  9. /**
  10. * Fonction du pipeline autoriser. N'a rien à faire
  11. * @pipeline autoriser
  12. */
  13. function svp_autoriser(){}
  14. /**
  15. * Autoriser l'iconification (mettre un logo) d'un dépot
  16. *
  17. * @param string $faire Action demandée
  18. * @param string $type Type d'objet sur lequel appliquer l'action
  19. * @param int $id Identifiant de l'objet
  20. * @param array $qui Description de l'auteur demandant l'autorisation
  21. * @param array $opt Options de cette autorisation
  22. * @return bool true s'il a le droit, false sinon
  23. */
  24. function autoriser_depot_iconifier_dist($faire, $type, $id, $qui, $opt){
  25. return true;
  26. }
  27. /**
  28. * Autoriser l'ajout d'un plugin ou d'un dépôt
  29. *
  30. * @param string $faire Action demandée
  31. * @param string $type Type d'objet sur lequel appliquer l'action
  32. * @param int $id Identifiant de l'objet
  33. * @param array $qui Description de l'auteur demandant l'autorisation
  34. * @param array $opt Options de cette autorisation
  35. * @return bool true s'il a le droit, false sinon
  36. */
  37. function autoriser_plugins_ajouter_dist($faire, $type, $id, $qui, $opt){
  38. if (!defined('_AUTORISER_TELECHARGER_PLUGINS'))
  39. define('_AUTORISER_TELECHARGER_PLUGINS', true);
  40. return _AUTORISER_TELECHARGER_PLUGINS AND autoriser('webmestre');
  41. }
  42. /**
  43. * Ajout de l'onglet 'Ajouter les plugins'
  44. *
  45. * L'URL dépend de l'existence ou pas d'un dépot de plugins.
  46. * En absence, on amène sur la page permettant de créer un premier dépot.
  47. *
  48. * @pipeline ajouter_onglets
  49. * @param array $flux Données du pipeline
  50. * @return array Données du pipeline
  51. */
  52. function svp_ajouter_onglets($flux){
  53. if (($flux['args']=='plugins')
  54. AND (autoriser('ajouter', '_plugins'))){
  55. $compteurs = svp_compter('depot');
  56. $page = ($compteurs['depot'] == 0) ? 'depots' : 'charger_plugin';
  57. $flux['data']['charger_plugin'] =
  58. new Bouton(
  59. find_in_theme('images/plugin-add-24.png'),
  60. 'plugin_titre_automatique_ajouter',
  61. generer_url_ecrire($page));
  62. }
  63. return $flux;
  64. }
  65. /**
  66. * Ne pas afficher par défaut les paquets,dépots,plugins locaux dans les boucles
  67. *
  68. * On n'affiche dans les boucles (PLUGINS) (DEPOTS) et (PAQUETS)
  69. * que les éléments distants par défaut (on cache les locaux).
  70. *
  71. * Utiliser {tout} pour tout avoir.
  72. * Utiliser {tout}{id_depot=0} pour avoir les plugins ou paquets locaux.
  73. *
  74. * @pipeline pre_boucle
  75. * @param Boucle $boucle Description de la boucle
  76. * @return Boucle Description de la boucle
  77. **/
  78. function svp_pre_boucle($boucle) {
  79. // DEPOTS, PAQUETS
  80. // Pour DEPOTS, on n'a jamais id_depot=0 dedans... donc... pas la peine.
  81. if (
  82. $boucle->type_requete == 'paquets'
  83. # OR $boucle->type_requete == 'depots'
  84. ) {
  85. $id_table = $boucle->id_table;
  86. $m_id_depot = $id_table .'.id_depot';
  87. // Restreindre aux depots distants
  88. if (
  89. #!isset($boucle->modificateur['criteres']['id_depot']) &&
  90. !isset($boucle->modificateur['tout'])) {
  91. $boucle->where[] = array("'>'", "'$m_id_depot'", "'\"0\"'");
  92. }
  93. }
  94. // PLUGINS
  95. elseif ($boucle->type_requete == 'plugins') {
  96. $id_table = $boucle->id_table;
  97. /*
  98. // les modificateurs ne se creent que sur les champs de la table principale
  99. // pas sur une jointure, il faut donc analyser les criteres passes pour
  100. // savoir si l'un deux est un 'id_depot'...
  101. $id_depot = false;
  102. foreach($boucle->criteres as $c){
  103. if (($c->op == 'id_depot') // {id_depot} ou {id_depot?}
  104. OR ($c->param[0][0]->texte == 'id_depot')) // {id_depot=x}
  105. {
  106. $id_depot = true;
  107. break;
  108. }
  109. }
  110. */
  111. if (
  112. # !$id_depot &&
  113. !isset($boucle->modificateur['tout'])) {
  114. // Restreindre aux plugins distant (id_depot > 0)
  115. $boucle->from["depots_plugins"] = "spip_depots_plugins";
  116. $boucle->where[] = array("'='", "'depots_plugins.id_plugin'", "'$id_table.id_plugin'");
  117. $boucle->where[] = array("'>'", "'depots_plugins.id_depot'", "'\"0\"'");
  118. }
  119. }
  120. return $boucle;
  121. }
  122. ?>