PageRenderTime 81ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/_plugins_/tickets/branches/v1.1/tickets_pipelines.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 309 lines | 184 code | 29 blank | 96 comment | 42 complexity | 1438890345bce5efff549aa942e20667 MD5 | raw file
  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3. // Ajout du bouton permettant de se rendre sur la page de gestion des tickets
  4. function tickets_ajouterBoutons($boutons_admin) {
  5. // uniquement si le plugin bandeau n'est pas la (ou SPIP 2.1)
  6. if(!$boutons_admin['bando_publication']){
  7. // affiche le bouton dans "Forum" si les forums sont activés, tout le monde peut voir cette page
  8. if($boutons_admin['forum']){
  9. $boutons_admin['forum']->sousmenu['tickets'] = new Bouton(
  10. find_in_path('ticket-24.png', 'prive/themes/spip/images/', false),
  11. _T('tickets:titre'),
  12. generer_url_ecrire('tickets')
  13. );
  14. }else{
  15. // Sinon affiche les tickets en sous menu de Edition, aussi accessible pour tout le monde
  16. $boutons_admin['naviguer']->sousmenu['tickets'] = new Bouton(
  17. find_in_path('ticket-24.png', 'prive/themes/spip/images/', false),
  18. _T('tickets:titre'),
  19. generer_url_ecrire('tickets')
  20. );
  21. }
  22. }
  23. return ($boutons_admin);
  24. }
  25. // Menu des tickets presente a droite ou a gauche de la page
  26. function menu_colonne () {
  27. $ret = "<div class='cadre cadre-e'><div class='cadre_padding'>";
  28. $ret .= icone_horizontale(_T('tickets:afficher_tickets'), generer_url_ecrire("tickets"), find_in_path("prive/themes/spip/images/ticket-24.png"), "", false);
  29. $contexte = array("titre"=>_T('tickets:vos_tickets_en_cours'), "id_auteur"=>$connect_id_auteur, "statut"=>"redac", "bloc"=>"_bloc1");
  30. $options = array("ajax"=>true);
  31. $page = recuperer_fond("prive/contenu/inc_liste_simple", $contexte, $options);
  32. $ret .= $page;
  33. $contexte = array("titre"=>_T('tickets:tous_tickets_ouverts'), "statut"=>"ouvert", "bloc"=>"_bloc2");
  34. $options = array("ajax"=>true);
  35. $page = recuperer_fond("prive/contenu/inc_liste_simple", $contexte, $options);
  36. $ret .= $page;
  37. include_spip('inc/tickets_autoriser');
  38. if (autoriser('ecrire', 'ticket')) {
  39. $ret .= icone_horizontale(_T('tickets:creer_ticket'), generer_url_ecrire("ticket_editer","id_ticket=new"), find_in_path("prive/themes/spip/images/ticket-24.png"), "creer.gif", false);
  40. }
  41. $ret .= "</div></div>";
  42. return $ret;
  43. }
  44. /**
  45. * Insertion dans le pipeline affiche_aguche
  46. * @param object $flux
  47. * @return
  48. */
  49. function tickets_gauche ($flux) {
  50. $exec = $flux["args"]["exec"];
  51. if (($exec == "ticket_afficher") OR ($exec == "ticket_editer")) {
  52. $data = $flux["data"];
  53. $ret = menu_colonne();
  54. $flux["data"] = $data.$ret;
  55. }
  56. return $flux;
  57. }
  58. /**
  59. * Insertion dans le pipeline objets_extensibles (du plugin champs_extras)
  60. * Permet aux tickets d'avoir des champs supplémentaires
  61. *
  62. * @param object $objets
  63. * @return
  64. */
  65. function tickets_objets_extensibles($objets){
  66. return array_merge($objets, array('ticket' => _T('tickets:tickets')));
  67. }
  68. /**
  69. * Insertion dans le pipeline accueil informations de l'etat des tickets
  70. * @param string $flux
  71. * @return string $flux
  72. */
  73. function tickets_accueil_informations($flux){
  74. global $spip_lang_left;
  75. $q = sql_select("COUNT(*) AS cnt, statut", 'spip_tickets', '', 'statut', '','', "COUNT(*)<>0");
  76. $cpt = array();
  77. $cpt2 = array();
  78. $defaut = $where ? '0/' : '';
  79. while($row = sql_fetch($q)) {
  80. $cpt[$row['statut']] = $row['cnt'];
  81. $cpt2[$row['statut']] = $defaut;
  82. }
  83. if ($cpt) {
  84. if ($where) {
  85. $q = sql_select("COUNT(*) AS cnt, statut", 'spip_tickets', $where, "statut");
  86. while($row = sql_fetch($q)) {
  87. $r = $row['statut'];
  88. $cpt2[$r] = intval($row['cnt']) . '/';
  89. }
  90. }
  91. $res .= afficher_plus(generer_url_ecrire("tickets",""))."<b>"._T('tickets:info_tickets')."</b>";
  92. $res .= "<ul style='margin:0px; padding-$spip_lang_left: 20px; margin-bottom: 5px;'>";
  93. if (isset($cpt['redac'])) $res .= "<li>"._T('tickets:info_tickets_redac').": ".$cpt2['redac'].$cpt['redac'] . '</li>';
  94. if (isset($cpt['ouvert'])) $res .= "<li><b>"._T('tickets:info_tickets_ouvert').": ".$cpt2['ouvert'] .$cpt['ouvert'] . "</b>" .'</li>';
  95. $res .= "</ul>";
  96. }
  97. $flux .= "<div class='verdana1'>" . $res . "</div>";
  98. return $flux;
  99. }
  100. /**
  101. * Insertion dans le pipeline accueil gadgets le bouton de creation d'un ticket
  102. * @param string $gadget
  103. * @return string $gadget
  104. */
  105. function tickets_accueil_gadgets($gadget){
  106. include_spip('inc/tickets_autoriser');
  107. if (autoriser('ecrire', 'ticket')) {
  108. $icone = icone_horizontale(_T('tickets:creer_ticket'), generer_url_ecrire("ticket_editer","id_ticket=new"), find_in_path("prive/themes/spip/images/ticket-24.png"), "creer.gif", false);
  109. $colonnes = extraire_balises($gadget, 'td');
  110. $derniere_colonne = fmod(floor(count($colonnes)/2), 4) == 0 ? true : false;
  111. if ($derniere_colonne) {
  112. $gadget .= "<table><tr><td>$icone</td></tr></table>";
  113. }
  114. else {
  115. $gadget = preg_replace(",</tr></table>$,is", "<td>$icone</td></tr></table>", $gadget);
  116. }
  117. }
  118. return $gadget;
  119. }
  120. /**
  121. * Insertion dans le pipeline affiche milieu de la liste des tickets en cours de rédaction
  122. * @param string $gadget
  123. * @return string $gadget
  124. */
  125. function tickets_affiche_milieu($flux){
  126. $exec = $flux["args"]["exec"];
  127. if ($exec == "accueil") {
  128. $flux['data'] .= '<br class="nettoyeur" />';
  129. $flux['data'] .= recuperer_fond('prive/contenu/inc_classement_accueil', array());
  130. }
  131. return $flux;
  132. }
  133. /**
  134. * Insertion dans le pipeline forum_objets_depuis_env (plugin forums balises/formulaire_forum.php)
  135. *
  136. * Permet de récupérer l'id du ticket dans le formulaire de forum
  137. *
  138. * @param array $objets
  139. * @return array $objets
  140. */
  141. function tickets_forum_objets_depuis_env($objets){
  142. $objets['ticket'] = id_table_objet('ticket');
  143. return $objets;
  144. }
  145. /**
  146. * Insertion dans le pipeline declarer_url_objets (SPIP ecrire/inc/urls)
  147. *
  148. * Ajoute les tickets comme objet pouvant avoir des urls spécifiques (propres...)
  149. *
  150. * @param array $flux Les objets ayant des urls
  151. * @return array $flux
  152. */
  153. function tickets_declarer_url_objets($flux){
  154. $flux[] = 'ticket';
  155. return $flux;
  156. }
  157. /**
  158. * Insertion dans le pipeline rechercher_liste_des_champs (SPIP)
  159. *
  160. * Ajoute les tickets dans la recherche
  161. *
  162. * @param array $tables
  163. * @return array $tables
  164. */
  165. function tickets_rechercher_liste_des_champs($tables){
  166. $tables['ticket'] = array(
  167. 'titre' => 8,
  168. 'texte' => 5
  169. );
  170. return $tables;
  171. }
  172. /**
  173. * Insertion dans le pipeline formulaire_charger (SPIP)
  174. * Si on est dans un formulaire de forum sur un ticket, on ajoute l'id_ticket dans les champs chargés
  175. * Permet de le récupérer par la suite dans le contexte de recuperer_fond
  176. *
  177. * @param array $flux Le contexte du formulaire
  178. */
  179. function tickets_formulaire_charger($flux){
  180. $args = $flux['args'];
  181. $form = $flux['args']['form'];
  182. if ($form == 'forum'){
  183. if($args['args'][4] == 'id_ticket'){
  184. $flux['data']['objet'] = 'ticket';
  185. $flux['data']['id_objet'] = $args['args'][6];
  186. $flux['data']['id_ticket'] = $args['args'][6];
  187. }
  188. }
  189. return $flux;
  190. }
  191. /**
  192. * Insertion dans le pipeline recuperer_fond (SPIP)
  193. * Sur le formulaire de forum, on ajoute 2 champs quand on commente un ticket :
  194. * -* La possibilité de changer le statut;
  195. * -* La possibilité de changer l'assignation
  196. *
  197. * @param array $flux Le contexte du pipeline
  198. */
  199. function tickets_recuperer_fond($flux){
  200. $args = $flux['args'];
  201. $fond = $args['fond'];
  202. if ($fond == 'formulaires/forum'){
  203. if(is_numeric($args['contexte']['id_ticket'])){
  204. $infos_ticket = sql_fetsel('statut,id_assigne','spip_tickets','id_ticket='.intval($args['contexte']['id_ticket']));
  205. if(_request('id_assigne')){
  206. $infos_ticket['id_assigne'] = _request('id_assigne');
  207. }
  208. if(_request('statut')){
  209. $infos_ticket['statut'] = _request('statut');
  210. }
  211. if(is_array($infos_ticket)){
  212. $saisie_ticket = recuperer_fond('inclure/inc-formulaire_forum',array_merge($args['contexte'],$infos_ticket));
  213. $flux['data']['texte'] = preg_replace(",(<fieldset.*<\/fieldset>),Uims","\\1".$saisie_ticket,$flux['data']['texte'],1);
  214. }
  215. }
  216. }
  217. return $flux;
  218. }
  219. /**
  220. * Insertion dans le pipeline formulaire_traiter (SPIP)
  221. * Si on est dans un formulaire de forum sur un ticket, on récupère le statut et l'assignation si présents
  222. * pour les notifications de forums des tickets en 2.1
  223. *
  224. * @param array $flux
  225. * @return array $flux
  226. */
  227. function tickets_formulaire_traiter($flux){
  228. if (($flux['args']['form']=='forum') AND ($flux['args']['args'][3]=='ticket')) {
  229. if($flux['args']['args'][3] == 'ticket'){
  230. include_spip('action/editer_ticket');
  231. $id_ticket = $flux['args']['args'][6];
  232. $infos_ticket = sql_fetsel('*','spip_tickets','id_ticket='.intval($id_ticket));
  233. if(($new_statut = _request('statut')) && ($new_statut != $infos_ticket['statut'])){
  234. instituer_ticket($id_ticket,array('statut'=>$new_statut));
  235. }
  236. if(($new_assigne=_request('id_assigne')) && ($new_assigne != $infos_ticket['id_assigne'])){
  237. include_spip('action/editer_ticket');
  238. revision_ticket($id_ticket, array('id_assigne'=>$new_assigne));
  239. }
  240. }
  241. }
  242. return $flux;
  243. }
  244. /**
  245. * Insertion dans le pipeline notifications_destinataires (Forum)
  246. * Ajoute des destinataires dans les notifications
  247. *
  248. * @param array $flux : le contexte du pipeline
  249. * @return array $flux : le contexte modifié
  250. */
  251. function tickets_notifications_destinataires($flux){
  252. /**
  253. * Notification des auteurs de tickets et des assignés et des autres forumeurs lorsque le post est validé
  254. */
  255. if(($flux['args']['quoi'] == 'forumvalide')){
  256. if(($flux['args']['options']['forum']['objet'] == 'ticket') && ($id_ticket = intval($flux['args']['options']['forum']['id_objet']))){
  257. /**
  258. * On notifie l'id_auteur et l'id_assigné du ticket s'ils ne sont pas l'auteur du post en question
  259. */
  260. $auteurs = sql_fetsel('id_auteur,id_assigne','spip_tickets','id_ticket='.intval($id_ticket).' AND id_auteur !='.intval($flux['args']['options']['forum']['id_auteur']));
  261. if(is_array($auteurs)){
  262. foreach($auteurs as $auteur){
  263. $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($auteur));
  264. $flux['data'][] = $email;
  265. }
  266. }
  267. /**
  268. * On notifie les autres forumeurs du ticket
  269. * GROUP BY id_auteur
  270. */
  271. $id_forums = sql_select('*','spip_forum','objet='.sql_quote('ticket').' AND id_objet='.intval($id_ticket).' AND id_forum != '.intval($flux['args']['options']['forum']['id_forum']),array('id_auteur'));
  272. while($forum = sql_fetch($id_forums)){
  273. $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($forum['id_auteur']));
  274. $flux['data'][] = $email;
  275. }
  276. }
  277. }
  278. return $flux;
  279. }
  280. ?>