compagnon_pipelines.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. if (!defined('_ECRIRE_INC_VERSION')) return;
  3. function compagnon_affiche_milieu($flux) {
  4. return compagnonage($flux, 'affiche_milieu');
  5. }
  6. function compagnon_affiche_gauche($flux) {
  7. return compagnonage($flux, 'affiche_gauche');
  8. }
  9. function compagnon_affiche_droite($flux) {
  10. return compagnonage($flux, 'affiche_droite');
  11. }
  12. /**
  13. *
  14. *
  15. * @param array $flux
  16. * Flux d'informations transmises au pipeline
  17. * @param string $pipeline
  18. * Nom du pipeline d'origine
  19. * @return array $flux
  20. * Le flux éventuellement complété de l'aide du compagnon
  21. **/
  22. function compagnonage($flux, $pipeline) {
  23. // pas de compagnon souhaite ?
  24. include_spip('inc/config');
  25. if (lire_config("compagnon/config/activer") == 'non') {
  26. return $flux;
  27. }
  28. $moi = $GLOBALS['visiteur_session'];
  29. $deja_vus = lire_config("compagnon/".$moi['id_auteur']);
  30. $flux['args']['pipeline'] = $pipeline;
  31. $flux['args']['deja_vus'] = $deja_vus;
  32. $aides = pipeline('compagnon_messages', array('args'=>$flux['args'], 'data' => array()));
  33. if (!$aides) {
  34. return $flux;
  35. }
  36. $ajouts = "";
  37. foreach ($aides as $aide) {
  38. // restreindre l'affichage par statut d'auteur
  39. $ok = true;
  40. if (isset($aide['statuts']) and $statuts = $aide['statuts']) {
  41. $ok = false;
  42. if (!is_array($statuts)) {
  43. $statuts = array($statuts);
  44. }
  45. if (in_array('webmestre', $statuts) and ($moi['webmestre'] == 'oui')) {
  46. $ok = true;
  47. } elseif (in_array($moi['statut'], $statuts)) {
  48. $ok = true;
  49. }
  50. }
  51. // si c'est ok, mais que l'auteur a deja lu ca. On s'arrete.
  52. if ($ok and is_array($deja_vus) and isset($deja_vus[$aide['id']]) and $deja_vus[$aide['id']]) {
  53. $ok = false;
  54. }
  55. if ($ok) {
  56. // demande d'un squelette
  57. if (isset($aide['inclure']) and $inclure = $aide['inclure']) {
  58. unset($aide['inclure']);
  59. $ajout = recuperer_fond($inclure, array_merge($flux['args'], $aide), array('ajax'=>true));
  60. }
  61. // sinon les textes sont fournis
  62. else {
  63. $ajout = recuperer_fond('compagnon/_boite', $aide, array('ajax'=>true));
  64. }
  65. $ajouts .= $ajout;
  66. }
  67. }
  68. // ajout de nos trouvailles
  69. if ($ajouts) {
  70. $twinkle = find_in_path('prive/javascript/jquery.twinkle.js');
  71. $ajouts.=<<<JS
  72. <script type="text/javascript">
  73. jQuery.getScript('$twinkle',function(){
  74. jQuery(function(){
  75. var options = {
  76. "effect": "drop",
  77. "effectOptions": {
  78. "color": "rgba(255,96,96,1)",
  79. "radius": 50
  80. }
  81. };
  82. jQuery('.compagnon .target').each(function(){
  83. var target = jQuery(this).attr('data-target');
  84. var delay = 0;
  85. jQuery(this).mousemove(function(){
  86. if (!delay) {
  87. delay=1; setTimeout(function(){delay=0;}, 800);
  88. jQuery(target).twinkle(options);
  89. }
  90. });
  91. });
  92. });
  93. });
  94. </script>
  95. JS;
  96. $flux['data'] = $ajouts . $flux['data'];
  97. }
  98. return $flux;
  99. }
  100. ?>