array('label'=> 'Identifiant' , 'type'=>'key'), 'scope' => array('label'=> 'Périmetre de l\'entité liée' , 'type'=>'text'), 'uid' => array('label'=> 'Identifiant de l\'entité liée' , 'type'=>'text'), 'comment' => array('label'=> 'Commentaire' , 'type'=>'textarea'), 'type' => array('label'=> 'Type d\'historique' , 'type'=>'text'), 'importance' => array('label'=> 'Importance' , 'type'=>'text'), 'sort' => array('label'=> 'Ordre' , 'type'=>'integer'), 'meta' => array('label'=> 'Meta informations' , 'type'=>'textarea') ); function __construct(){ parent::__construct(); $this->importance = 'normal'; } public static function importance($key=null){ $importances = array( self::IMPORTANCE_NORMAL => array('label'=>'Normal','color' => '#222222'), self::IMPORTANCE_IMPORTANT => array('label'=>'Urgent','color' => '#dc3545'), ); if(!isset($key)) return $importances; return isset($importances[$key]) ? $importances[$key] : array(); } //Colonnes indexées public $indexes = array(); public static function types($key=null){ $types = array( self::TYPE_READ => array('slug'=>self::TYPE_READ,'label' => 'Consultation','icon' => 'far fa-eye','color' => '#e2ec55'), self::TYPE_COMMENT => array('slug'=>self::TYPE_COMMENT,'label' => 'Commentaire','icon' => 'far fa-comments','color' => '#6ab04c'), self::TYPE_EDIT => array('slug'=>self::TYPE_EDIT,'label' => 'Édition','icon' => 'fas fa-marker','color' => '#686de0'), self::TYPE_DELETE => array('slug'=>self::TYPE_DELETE,'label' => 'Suppression','icon' => 'fas fa-trash-restore','color' => '#eb4d4b') ); Plugin::callHook('history_type',array(&$types)); if(!isset($key)) return $types; return isset($types[$key]) ? $types[$key] : array('slug'=>'undefined','label'=>'','icon'=>'','color'=>''); } //Ajout rapide d'un historique public static function put($scope,$uid,$comment,$type=null){ $history = new History(); $history->scope = $scope; $history->uid = $uid; $history->comment = $comment; if(isset($type)) $history->type = $type; $history->save(); } // Créé un historique sur changement d'une entité // prend en compte le scope, l'item dans l'ancien etat, l'item dans l'etat actuel // et détaille en Human readable les modifications public static function entityChange($scope,$oldItem,$item){ $differenties = Entity::compare($oldItem,$item); $fieldTypes = FieldType::available(); $detail = ''; foreach($differenties as $difference){ $fields = $oldItem->fields(false); $fieldKey = $difference['field']; if(!isset($fields[$fieldKey])) continue; $field = $fields[$fieldKey]; $value1 = $difference['value1']; $value2 = $difference['value2']; //gestion des transformations de valeurs de liste en dur if($field['fieldtype']=='list' && method_exists ($item,$fieldKey.'s' ) ){ $method = $fieldKey.'s'; $value1 = $item::$method($difference['value1']); $value1 =isset($value1['label']) ? $value1['label'] : $difference['value1']; $value2 = $item::$method($difference['value2']); $value2 =isset($value2['label']) ? $value2['label'] : $difference['value2']; //gestion de stransformations de valeurs de fieldtype }else if(isset($fieldTypes[$field['fieldtype']]) ){ $fieldType = $fieldTypes[$field['fieldtype']]; if(property_exists($fieldType,'onRawDisplay')){ $method = $fieldType->onRawDisplay; $value1 = $method($difference['value1'], $field); $value2 = $method($difference['value2'], $field); } //si le champs est une foreign key on affiche l'eventuel libellé de cette foreign key if(isset($field['link'])){ require_once $field['link']; $class = str_replace('.class.php','',basename($field['link'])); if(property_exists($class,'label')){ $instance1 = $class::getById($difference['value1']); if($instance1) $value1 = $instance1->label; $instance2 = $class::getById($difference['value2']); if($instance2) $value2 = $instance2->label; } } } $detail.= '
Champ '.$field['label'].' '; if(empty($value1)){ $detail.= ' ajout de la valeur '.truncate($value2,100).''; }else if(empty($value2)){ $detail.= ' suppression de la valeur '.truncate($value1,100).''; }else{ $detail.=' modifié de '.truncate($value1,100).' en '.truncate($value2,100).''; } } $history = new History(); $history->scope = $scope; $history->uid = $item->id; $history->comment = (!empty($oldItem->id) ? "Modification":"Création")." ".$detail; $history->type = History::TYPE_EDIT; $history->save(); } } ?>