| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | 
							- <?php
 
- /**
 
-  * Define a history.
 
-  * @author  Valentin CARRUESCO
 
-  * @category Core
 
-  * @license MIT
 
-  */
 
- class History extends Entity{
 
- 	public $id;
 
- 	public $scope; //Scope (plugin, page...) (Texte)
 
- 	public $uid; //Item ID/UID concerné (Texte)
 
- 	public $comment; //Commentaire (Texte Long)
 
- 	public $type; //Type d'historique (Texte)
 
- 	public $importance; //Importance de message (Texte)
 
- 	public $meta; //Meta données (Texte Long)
 
- 	public $sort; //Ordre (int)
 
- 	const TYPE_READ = 'read';
 
- 	const TYPE_COMMENT = 'comment';
 
- 	const TYPE_EDIT = 'edit';
 
- 	const TYPE_DELETE = 'delete';
 
- 	const IMPORTANCE_NORMAL = 'normal';
 
- 	const IMPORTANCE_IMPORTANT = 'important';
 
- 	public $entityLabel = 'Historique';
 
- 	protected $TABLE_NAME = 'history';
 
- 	public $fields = array(
 
- 		'id' => 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.= '<br/>Champ <code>'.$field['label'].'</code> ';
 
- 			if(empty($value1)){
 
- 				$detail.= ' ajout de la valeur <span class="font-weight-bold">'.truncate($value2,100).'</span>';
 
- 			}else if(empty($value2)){
 
- 				$detail.= ' suppression de la valeur <span class="font-weight-bold">'.truncate($value1,100).'</span>';
 
- 			}else{
 
- 				$detail.=' modifié de <span class="font-weight-bold">'.truncate($value1,100).'</span> en <span class="font-weight-bold">'.truncate($value2,100).'</span>';
 
- 			}
 
- 		}
 
- 		$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();
 
- 	}
 
- }
 
 
  |