WorkflowEffect.class.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * Define a workfloweffect.
  4. * Un effet est la conséquence d'une ou plusieurs causes
  5. * @author Administrateur
  6. * @category Plugin
  7. * @license MIT
  8. */
  9. class WorkflowEffect extends Entity{
  10. public $id;
  11. public $type; //Type (Liste configurable)
  12. public $workflow; //Workflow (Entier)
  13. public $values; //Valeurs (Texte Long)
  14. public $sort; //Ordre (Entier)
  15. protected $TABLE_NAME = 'workflow_effect';
  16. public $fields = array(
  17. 'id' => 'key',
  18. 'type' => 'string',
  19. 'workflow' => 'int',
  20. 'values' => 'longstring',
  21. 'sort' => 'int'
  22. );
  23. //Colonnes indexées
  24. public $indexes = array();
  25. //Méthode d'execution d'un effet
  26. public function run($parameters = array()){
  27. //On récupere la calsse du type d'effet pour l'effet courant
  28. $type = self::types($this->type);
  29. // On met les variables de workflow a disposition de l'effet
  30. // On utilise pas $conf->get volontairement pour eviter le session cache conflictuel avec les workflows
  31. $theConf = Configuration::load(array('key'=>'workflow-var'));
  32. $confValue = !$theConf ? '{}' : decrypt($theConf->value);
  33. $parameters['workflow-var'] = json_decode($confValue,true);
  34. //On execute la méthode run de la classe du type d'effet ciblée en lui fournissant les données de l'effet et les données workflow (entité, item courant etc...)
  35. $results = $type::run($this,$parameters);
  36. $logs[] = '<i class="'.$type::manifest('icon').'"></i> '.$type::manifest('label').'<br><div class="pl-3">'.$results.'</div>';
  37. return is_array($logs) ? $logs : array();
  38. }
  39. //Récuperation des ttyes d'effets possibles
  40. public static function types($slug = null){
  41. $types = array();
  42. //Récuperations des types d'effet par defaut définit dans le dossier effect
  43. foreach (glob(__DIR__.SLASH.'effect'.SLASH.'*.class.php') as $file) {
  44. require_once($file);
  45. $class = str_replace('.class.php','',basename($file));
  46. $infos = $class::manifest();
  47. $types[$infos['slug']] = $class;
  48. }
  49. //Récuperation des effets fournis par d'autres plugins
  50. Plugin::callHook('workflow_effect',array(&$types));
  51. if(!isset($slug)) return $types;
  52. return isset($types[$slug]) ? $types[$slug] : $types['mail'];
  53. }
  54. }
  55. ?>