12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- <?php
- /*
- Cause de workflow
- Compare un champ de l'entité ciblé à la valeur définie dans la cause
- Ne s'applique qu'aux workflows de type entité et liste
- */
- class EntityFieldCause{
- //Descriptif de la cause
- public static function manifest($key = null){
- $manifest = array(
- 'slug' => 'entity-field',
- 'label' => 'Entité',
- 'type' => array(Workflow::TYPE_ENTITY,Workflow::TYPE_LIST),
- 'class' => get_called_class(),
- 'path' => __FILE__,
- 'icon' => 'fas fa-leaf',
- 'attributes' => ' data-filter-type="entity-field" ',
- 'color' => '#ff9f43',
- );
- if(!isset($key)) return $manifest;
- return isset($manifest[$key]) ? $manifest[$key] : '' ;
- }
- //Type de filtre de cause custom pour cette cause (champs additionnels)
- public static function filter($entity = array()){
- $stream = '<div class="filter-value-block" data-value-type="entity-field" data-value-selector=".filter-value:last-child">
- <div class="filter-subfield d-inline-block">
- '.$entity['label'].'.
- <select data-id="entity-field" class="d-inline-block mt-2 border-0 font-weight-bold text-primary" value="Ma colonne">
- <option value="">- Attribut - </option>';
- if(isset($entity['fields'] )):
- foreach($entity['fields'] as $slug=>$attribute):
- $stream .=' <option data-attribute-type="'.$attribute['type'].'" value="'.$slug.'">'.$attribute['label'].'</option>';
- endforeach;
- endif;
- $stream .='</select>
- </div>
- <select class="form-control filter-operator border-0 text-primary">
- <option data-default-view="'.base64_encode(json_encode(array('view' => "text"))).'" value="=">Égal</option>
- <option data-default-view="'.base64_encode(json_encode(array('view' => "text"))).'" value="!=">Différent</option>
- <option data-default-view="'.base64_encode(json_encode(array('view' => "text"))).'" value=">">Inférieur</option>
- <option data-default-view="'.base64_encode(json_encode(array('view' => "text"))).'" value="<">Supérieur</option>
- <option data-default-view="'.base64_encode(json_encode(array('view' => "text"))).'" value="like">Contient</option>
- </select>
- </div>';
- return $stream;;
- }
- //Méthode de vérification de la cause
- public static function check($filter,$parameters = array()){
- if(!isset($parameters['current'])) throw new Exception("Aucun item entité n'est présent");
- $column = $filter['subcolumn']['entity-field'];
- $class = get_class($parameters['current']);
- $columnValue = null;
- //la colonne évoquée peut être un attribut de classe ou une méthode de classe
- if( property_exists ( $class , $column ) ) $columnValue = $parameters['current']->$column;
- if( method_exists ( $class , $column ) ) $columnValue = $parameters['current']->$column();
- switch($filter['operator']){
- case '=':
- if(!isset($columnValue) ) return false;
- if($columnValue != $filter['value'][0] ) return false;
- break;
- case '!=':
- if(isset($columnValue) && $columnValue == $filter['value'][0] ) return false;
- break;
- case '<':
- if($columnValue > $filter['value'][0]) return false;
- break;
- case '>':
- if($columnValue < $filter['value'][0]) return false;
- break;
- case 'like':
- if( strpos( mb_strtolower($columnValue), mb_strtolower($filter['value'][0]) ) === false ) return false;
- break;
- }
- return true;
- }
- }
- ?>
|