action.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. <?php
  2. global $_,$conf;
  3. switch($_['action']){
  4. /** WORKFLOW **/
  5. //Récuperation d'une liste de workflow
  6. case 'workflow_workflow_search':
  7. Action::write(function(&$response){
  8. global $_;
  9. User::check_access('workflow','read');
  10. require_once(__DIR__.SLASH.'Workflow.class.php');
  11. Workflow::create();
  12. // OPTIONS DE RECHERCHE, A ACTIVER POUR UNE RECHERCHE AVANCEE
  13. $query = 'SELECT * FROM '.Workflow::tableName().' WHERE 1';
  14. $data = array();
  15. //Recherche simple
  16. if(!empty($_['filters']['keyword'])){
  17. $query .= ' AND label LIKE ?';
  18. $data[] = '%'.$_['filters']['keyword'].'%';
  19. }
  20. //Recherche avancée
  21. if(isset($_['filters']['advanced'])) filter_secure_query($_['filters']['advanced'],array('label'),$query,$data);
  22. //Tri des colonnes
  23. if(isset($_['sort'])) sort_secure_query($_['sort'],array('label'),$query,$data);
  24. //Pagination
  25. $response['pagination'] = Workflow::paginate(20,(!empty($_['page'])?$_['page']:0),$query,$data);
  26. $workflows = Workflow::staticQuery($query,$data,true,0);
  27. foreach($workflows as $workflow){
  28. $row = $workflow->toArray();
  29. $row['type'] = Workflow::types($row['type']);
  30. $row['label'] = truncate(html_entity_decode($row['label']),60);
  31. $response['rows'][] = $row;
  32. }
  33. });
  34. break;
  35. //Ajout ou modification d'élément workflow
  36. case 'workflow_workflow_save':
  37. Action::write(function(&$response){
  38. global $_;
  39. User::check_access('workflow','edit');
  40. require_once(__DIR__.SLASH.'Workflow.class.php');
  41. $item = Workflow::provide();
  42. $item->label = $_['label'];
  43. $item->icon = $_['icon'];
  44. $item->type = $_['type'];
  45. $item->entity = $_['entity'];
  46. $item->color = $_['color'];
  47. $item->cause = !empty($_['cause']) ? json_encode($_['cause']) : '{}';
  48. $item->save();
  49. $response = $item->toArray();
  50. });
  51. break;
  52. //Suppression d'élement workflow
  53. case 'workflow_workflow_delete':
  54. Action::write(function(&$response){
  55. global $_;
  56. User::check_access('workflow','delete');
  57. if(empty($_['id'])) throw new Exception("Id non spécifiée");
  58. require_once(__DIR__.SLASH.'Workflow.class.php');
  59. require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
  60. require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
  61. Workflow::deleteById($_['id']);
  62. WorkflowEvent::delete(array('workflow'=>$_['id']));
  63. WorkflowEffect::delete(array('workflow'=>$_['id']));
  64. });
  65. break;
  66. //Lancement manuel d'un workflow
  67. case 'workflow_workflow_run':
  68. Action::write(function(&$response){
  69. global $_;
  70. User::check_access('workflow','edit');
  71. require_once(__DIR__.SLASH.'Workflow.class.php');
  72. require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
  73. $item = Workflow::provide();
  74. $parameters = array();
  75. WorkflowEvent::trigger($_['eventSlug'],$parameters,$item->id);
  76. });
  77. break;
  78. //Sauvegarde des configurations de workflow
  79. case 'workflow_setting_save':
  80. Action::write(function(&$response){
  81. global $_,$conf;
  82. User::check_access('workflow','configure');
  83. //Si input file "multiple", possibilité de normlaiser le
  84. //tableau $_FILES récupéré avec la fonction => normalize_php_files();
  85. foreach(Configuration::setting('workflow') as $key=>$value){
  86. if(!is_array($value)) continue;
  87. $allowed[] = $key;
  88. }
  89. foreach ($_['fields'] as $key => $value) {
  90. if(in_array($key, $allowed))
  91. $conf->put($key,$value);
  92. }
  93. });
  94. break;
  95. //Récuperation des effets, des causes et des évenements pour le workflow courant
  96. case 'workflow_effect_search':
  97. Action::write(function(&$response){
  98. global $_;
  99. User::check_access('workflow','read');
  100. require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
  101. require_once(__DIR__.SLASH.'Workflow.class.php');
  102. $workflow = Workflow::provide('workflow');
  103. //Récuperation des effets déja définis
  104. foreach(WorkflowEffect::loadAll(array('workflow'=>$workflow->id),array('sort')) as $effect){
  105. $row = $effect->toArray();
  106. $row['workflow'] = $workflow->toArray();
  107. $classType = WorkflowEffect::types($row['type']);
  108. $row['type'] = $classType::manifest();
  109. $row['form'] = $classType::form(json_decode($effect->values,true));
  110. $response['rows'][] = $row;
  111. }
  112. });
  113. break;
  114. //Récuperation des effets, des causes et des évenements pour le workflow courant
  115. case 'workflow_cause_search':
  116. Action::write(function(&$response){
  117. global $_;
  118. User::check_access('workflow','read');
  119. require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
  120. require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
  121. require_once(__DIR__.SLASH.'Workflow.class.php');
  122. $workflow = Workflow::provide('workflow');
  123. //Si le workflow est de type entité ou liste d'entité on récupere le type d'entité concerné dans $entity
  124. // pour la fournir aux causes qui utilisent les colonnes / label de l'entité
  125. $entity = array();
  126. if( in_array($workflow->type, array(Workflow::TYPE_ENTITY)) ){
  127. foreach(WorkflowEvent::events(null,Workflow::TYPE_ENTITY) as $eventGroup) {
  128. if($eventGroup['entity']['slug'] == $workflow->entity){
  129. $entity = $eventGroup['entity'];
  130. break;
  131. }
  132. }
  133. }else if(in_array($workflow->type, array(Workflow::TYPE_LIST)) ){
  134. foreach(WorkflowEvent::events(null,Workflow::TYPE_LIST) as $eventGroup) {
  135. if($eventGroup['entity']['slug'] == $workflow->entity){
  136. $entity = $eventGroup['entity'];
  137. break;
  138. }
  139. }
  140. }
  141. $response['filters'] = array();
  142. //Récuperation des causes disponibles pour ce ttype de workflow
  143. $availableCauses = array();
  144. foreach(Workflow::causes(null,$workflow->type) as $cause){
  145. //Si la cause demande un type de filtre custom, on demande a l'ui de l'ajouter en caché sur la page
  146. if(method_exists ($cause,'filter')) $response['filters'][] = $cause::filter($entity);
  147. $availableCauses[] = array(
  148. 'slug' => $cause::manifest('slug'),
  149. 'attributes' => $cause::manifest('attributes'),
  150. 'label' => $cause::manifest('label'),
  151. );
  152. }
  153. //Récuperation des causes déja définies pour le workflow
  154. $enabledCauses = json_encode(filters_set(json_decode($workflow->cause,true)));
  155. //Envois des causes disponibles et des causes définies
  156. $response['causes'] = array( 'available' => $availableCauses, 'enabled' => $enabledCauses) ;
  157. });
  158. break;
  159. /** WORKFLOW EFFECT **/
  160. //Ajout ou modification d'élément workfloweffect
  161. case 'workflow_workflow_effect_save':
  162. Action::write(function(&$response){
  163. global $_;
  164. User::check_access('workflow','edit');
  165. require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
  166. $item = WorkflowEffect::provide();
  167. if(!empty($_['workflow'])) $item->workflow = $_['workflow'];
  168. if(!empty($_['effect-type'])) $item->type = $_['effect-type'];
  169. if(!empty($_['values'])) $item->values = json_encode($_['values']);
  170. if(!isset($item->sort)) $item->sort = 1000;
  171. $item->save();
  172. $response = $item->toArray();
  173. });
  174. break;
  175. //Tri des effets
  176. case 'workflow_workflow_effect_sort':
  177. Action::write(function(&$response){
  178. global $_;
  179. User::check_access('workflow','edit');
  180. require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
  181. foreach ($_['sort'] as $sort=>$id ) {
  182. $item = WorkflowEffect::getById($id);
  183. $item->sort = $sort;
  184. $item->save();
  185. }
  186. });
  187. break;
  188. //Récuperation ou edition d'élément workfloweffect
  189. case 'workflow_workflow_effect_edit':
  190. Action::write(function(&$response){
  191. global $_;
  192. User::check_access('workflow','edit');
  193. require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
  194. require_once(__DIR__.SLASH.'Workflow.class.php');
  195. $response = WorkflowEffect::getById($_['id'],1);
  196. });
  197. break;
  198. //Suppression d'élement workfloweffect
  199. case 'workflow_workflow_effect_delete':
  200. Action::write(function(&$response){
  201. global $_;
  202. User::check_access('workflow','delete');
  203. require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
  204. WorkflowEffect::deleteById($_['id']);
  205. });
  206. break;
  207. /** WORKFLOW EVENT **/
  208. //Récuperation d'une liste de workflowevent
  209. case 'workflow_event_search':
  210. Action::write(function(&$response){
  211. global $_;
  212. User::check_access('workflow','read');
  213. require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
  214. require_once(__DIR__.SLASH.'Workflow.class.php');
  215. //Récuperation des évenements définis pour le workflow
  216. $workflowevents = WorkflowEvent::loadAll(array('workflow'=>$_['workflow']));
  217. foreach($workflowevents as $workflowevent){
  218. $row = WorkflowEvent::events($workflowevent->slug);
  219. $row['id'] = $workflowevent->id;
  220. $row['slug'] = $workflowevent->slug;
  221. $response['rows'][] = $row;
  222. }
  223. //Récuperation des évenements disponibles pour ce type de workflow
  224. $response['events'] = array();
  225. foreach(WorkflowEvent::events(null,$_['type']) as $eventGroup){
  226. if(!empty($_['entity']) && (!isset($eventGroup['entity']['slug']) || $eventGroup['entity']['slug']!=$_['entity'] ) ) continue;
  227. $response['events'] = array_merge($response['events'] ,$eventGroup['events']);
  228. }
  229. });
  230. break;
  231. //Ajout ou modification d'élément workflowevent
  232. case 'workflow_workflow_event_save':
  233. Action::write(function(&$response){
  234. global $_;
  235. User::check_access('workflow','edit');
  236. require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
  237. $item = WorkflowEvent::provide();
  238. $item->slug = $_['event'];
  239. $item->workflow = $_['workflow'];
  240. $item->save();
  241. });
  242. break;
  243. //Suppression d'élement workflowevent
  244. case 'workflow_workflow_event_delete':
  245. Action::write(function(&$response){
  246. global $_;
  247. User::check_access('workflow','delete');
  248. require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
  249. WorkflowEvent::deleteById($_['id']);
  250. });
  251. break;
  252. }
  253. ?>