123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- <?php
- /** WORKFLOW **/
- //Récuperation d'une liste de workflow
- Action::register('workflow_workflow_search',function(&$response){
-
- global $_;
- User::check_access('workflow','read');
- require_once(__DIR__.SLASH.'Workflow.class.php');
- Workflow::create();
- // OPTIONS DE RECHERCHE, A ACTIVER POUR UNE RECHERCHE AVANCEE
- $query = 'SELECT * FROM '.Workflow::tableName().' WHERE 1';
- $data = array();
- //Recherche simple
- if(!empty($_['filters']['keyword'])){
- $query .= ' AND label LIKE ?';
- $data[] = '%'.$_['filters']['keyword'].'%';
- }
- //Recherche avancée
- if(isset($_['filters']['advanced'])) filter_secure_query($_['filters']['advanced'],array('label'),$query,$data);
- //Tri des colonnes
- if(isset($_['sort'])) sort_secure_query($_['sort'],array('label'),$query,$data);
- //Pagination
- $response['pagination'] = Workflow::paginate(20,(!empty($_['page'])?$_['page']:0),$query,$data);
- $workflows = Workflow::staticQuery($query,$data,true,0);
- foreach($workflows as $workflow){
- $row = $workflow->toArray();
- $row['type'] = Workflow::types($row['type']);
- $row['label'] = truncate(html_entity_decode($row['label']),60);
- $response['rows'][] = $row;
- }
-
-
- });
-
- //Ajout ou modification d'élément workflow
- Action::register('workflow_workflow_save',function(&$response){
-
- global $_;
- User::check_access('workflow','edit');
- require_once(__DIR__.SLASH.'Workflow.class.php');
- $item = Workflow::provide();
- $item->label = $_['label'];
- $item->icon = $_['icon'];
- $item->type = $_['type'];
- $item->entity = $_['entity'];
- $item->color = $_['color'];
- $item->cause = !empty($_['cause']) ? json_encode($_['cause']) : '{}';
- $item->save();
- $response = $item->toArray();
-
- });
-
- //Suppression d'élement workflow
- Action::register('workflow_workflow_delete',function(&$response){
-
- global $_;
- User::check_access('workflow','delete');
- if(empty($_['id'])) throw new Exception("Id non spécifiée");
- require_once(__DIR__.SLASH.'Workflow.class.php');
- require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
- require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
- Workflow::deleteById($_['id']);
- WorkflowEvent::delete(array('workflow'=>$_['id']));
- WorkflowEffect::delete(array('workflow'=>$_['id']));
-
- });
- //Lancement manuel d'un workflow
- Action::register('workflow_workflow_run',function(&$response){
-
- global $_;
- User::check_access('workflow','edit');
- require_once(__DIR__.SLASH.'Workflow.class.php');
- require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
- $item = Workflow::provide();
- $parameters = array();
- WorkflowEvent::trigger($_['eventSlug'],$parameters,$item->id);
-
- });
-
- //Sauvegarde des configurations de workflow
- Action::register('workflow_setting_save',function(&$response){
-
- global $_,$conf;
- User::check_access('workflow','configure');
- //Si input file "multiple", possibilité de normlaiser le
- //tableau $_FILES récupéré avec la fonction => normalize_php_files();
-
- foreach(Configuration::setting('workflow') as $key=>$value){
- if(!is_array($value)) continue;
- $allowed[] = $key;
- }
- foreach ($_['fields'] as $key => $value) {
- if(in_array($key, $allowed))
- $conf->put($key,$value);
- }
-
- });
-
- //Récuperation des effets, des causes et des évenements pour le workflow courant
- Action::register('workflow_effect_search',function(&$response){
-
- global $_;
- User::check_access('workflow','read');
- require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
- require_once(__DIR__.SLASH.'Workflow.class.php');
-
- $workflow = Workflow::provide('workflow');
-
- //Récuperation des effets déja définis
- foreach(WorkflowEffect::loadAll(array('workflow'=>$workflow->id),array('sort')) as $effect){
- $row = $effect->toArray();
- $row['workflow'] = $workflow->toArray();
- $classType = WorkflowEffect::types($row['type']);
- $row['type'] = $classType::manifest();
- $row['form'] = $classType::form(json_decode($effect->values,true));
- $response['rows'][] = $row;
- }
-
- });
- //Récuperation des effets, des causes et des évenements pour le workflow courant
- Action::register('workflow_cause_search',function(&$response){
-
- global $_;
- User::check_access('workflow','read');
- require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
- require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
- require_once(__DIR__.SLASH.'Workflow.class.php');
-
- $workflow = Workflow::provide('workflow');
-
- //Si le workflow est de type entité ou liste d'entité on récupere le type d'entité concerné dans $entity
- // pour la fournir aux causes qui utilisent les colonnes / label de l'entité
- $entity = array();
- if( in_array($workflow->type, array(Workflow::TYPE_ENTITY)) ){
- foreach(WorkflowEvent::events(null,Workflow::TYPE_ENTITY) as $eventGroup) {
- if($eventGroup['entity']['slug'] == $workflow->entity){
- $entity = $eventGroup['entity'];
- break;
- }
- }
- }else if(in_array($workflow->type, array(Workflow::TYPE_LIST)) ){
- foreach(WorkflowEvent::events(null,Workflow::TYPE_LIST) as $eventGroup) {
- if($eventGroup['entity']['slug'] == $workflow->entity){
- $entity = $eventGroup['entity'];
- break;
- }
- }
- }
- $response['filters'] = array();
- //Récuperation des causes disponibles pour ce ttype de workflow
- $availableCauses = array();
- foreach(Workflow::causes(null,$workflow->type) as $cause){
- //Si la cause demande un type de filtre custom, on demande a l'ui de l'ajouter en caché sur la page
- if(method_exists ($cause,'filter')) $response['filters'][] = $cause::filter($entity);
- $availableCauses[] = array(
- 'slug' => $cause::manifest('slug'),
- 'attributes' => $cause::manifest('attributes'),
- 'label' => $cause::manifest('label'),
- );
- }
- //Récuperation des causes déja définies pour le workflow
- $enabledCauses = json_encode(filters_set(json_decode($workflow->cause,true)));
- //Envois des causes disponibles et des causes définies
- $response['causes'] = array( 'available' => $availableCauses, 'enabled' => $enabledCauses) ;
-
-
- });
-
- /** WORKFLOW EFFECT **/
-
- //Ajout ou modification d'élément workfloweffect
- Action::register('workflow_workflow_effect_save',function(&$response){
-
- global $_;
- User::check_access('workflow','edit');
- require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
- $item = WorkflowEffect::provide();
-
- if(!empty($_['workflow'])) $item->workflow = $_['workflow'];
- if(!empty($_['effect-type'])) $item->type = $_['effect-type'];
- if(!empty($_['values'])) $item->values = json_encode($_['values']);
- if(!isset($item->sort)) $item->sort = 1000;
-
- $item->save();
- $response = $item->toArray();
-
- });
- //Tri des effets
- Action::register('workflow_workflow_effect_sort',function(&$response){
-
- global $_;
- User::check_access('workflow','edit');
- require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
-
- foreach ($_['sort'] as $sort=>$id ) {
- $item = WorkflowEffect::getById($id);
- $item->sort = $sort;
- $item->save();
- }
-
- });
-
- //Récuperation ou edition d'élément workfloweffect
- Action::register('workflow_workflow_effect_edit',function(&$response){
-
- global $_;
- User::check_access('workflow','edit');
- require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
- require_once(__DIR__.SLASH.'Workflow.class.php');
- $response = WorkflowEffect::getById($_['id'],1);
-
- });
- //Suppression d'élement workfloweffect
- Action::register('workflow_workflow_effect_delete',function(&$response){
-
- global $_;
- User::check_access('workflow','delete');
- require_once(__DIR__.SLASH.'WorkflowEffect.class.php');
- WorkflowEffect::deleteById($_['id']);
-
-
- });
- /** WORKFLOW EVENT **/
- //Récuperation d'une liste de workflowevent
- Action::register('workflow_event_search',function(&$response){
-
- global $_;
- User::check_access('workflow','read');
- require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
- require_once(__DIR__.SLASH.'Workflow.class.php');
-
- //Récuperation des évenements définis pour le workflow
- $workflowevents = WorkflowEvent::loadAll(array('workflow'=>$_['workflow']));
- foreach($workflowevents as $workflowevent){
- $row = WorkflowEvent::events($workflowevent->slug);
- $row['id'] = $workflowevent->id;
- $row['slug'] = $workflowevent->slug;
- $response['rows'][] = $row;
- }
- //Récuperation des évenements disponibles pour ce type de workflow
- $response['events'] = array();
- foreach(WorkflowEvent::events(null,$_['type']) as $eventGroup){
- if(!empty($_['entity']) && (!isset($eventGroup['entity']['slug']) || $eventGroup['entity']['slug']!=$_['entity'] ) ) continue;
- $response['events'] = array_merge($response['events'] ,$eventGroup['events']);
- }
-
-
- });
-
- //Ajout ou modification d'élément workflowevent
- Action::register('workflow_workflow_event_save',function(&$response){
-
- global $_;
- User::check_access('workflow','edit');
- require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
- $item = WorkflowEvent::provide();
- $item->slug = $_['event'];
- $item->workflow = $_['workflow'];
- $item->save();
-
- });
-
- //Suppression d'élement workflowevent
- Action::register('workflow_workflow_event_delete',function(&$response){
-
- global $_;
- User::check_access('workflow','delete');
- require_once(__DIR__.SLASH.'WorkflowEvent.class.php');
- WorkflowEvent::deleteById($_['id']);
-
- });
- ?>
|