| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | 
							- <?php
 
- /**
 
-  * Define a person contact.
 
-  * @author Valentin carrueso
 
-  * @category Plugin
 
-  * @license MIT
 
-  */
 
- class ContactPerson extends Entity{
 
- 	public $id;
 
- 	public $name; //Nom (Texte)
 
- 	public $firstname; //Prénom (Texte)
 
- 	public $job; //Fonction (Texte)
 
- 	public $account; //Compte lié (uniqment si référent interne)
 
- 	public $civility; //Civilité (Texte)
 
- 	public $state; //Etat (Texte)
 
- 	public $type; //Type (Texte)
 
- 	public $phone; //Téléphone (Texte)
 
- 	public $mobile; //Téléphone Mobile (Texte)
 
- 	public $mail; //E-mail (Texte)
 
- 	public $scope; //Scope (Texte)
 
- 	public $comment; //Commentaire (Texte long)
 
- 	public $uid; //UID (Entier)
 
- 	public $meta = array();
 
- 	public $tag; //Etiquettes (Etiquettes)
 
- 	const TYPE_EXTERNAL = "external";
 
- 	const TYPE_CLIENT = "client";
 
- 	const TYPE_USER = "user";
 
- 	public $entityLabel = 'Contact';
 
- 	protected $TABLE_NAME = 'contact_person';
 
- 	public $fields = array(
 
- 		'id' => array('type'=>'key', 'label' => 'Identifiant'),
 
- 		'name' => array('type'=>'text', 'label' => 'Nom'),
 
- 		'firstname' => array('type'=>'text', 'label' => 'Prénom'),
 
- 		'job' => array('type'=>'text', 'label' => 'Métier/Fonction'),
 
- 		'account' => array('label'=>'Compte utilisateur lié','type'=>'user'),
 
- 		'civility' => array('type'=>'list', 'label' => 'Civilité'),
 
- 		'state' => array('type'=>'text', 'label' => 'Etat'),
 
- 		'type' => array('type'=>'text', 'label' => 'Type'),
 
- 		//'phone' => array('type'=>'phone', 'label' => 'Téléphone'),
 
- 		//'mail' => array('type'=>'mail', 'label' => 'Email'),
 
- 		'scope' => array('type'=>'text', 'label' => 'Périmetre'),
 
- 		'comment' => array('type'=>'textarea', 'label' => 'Commentaire'),
 
- 		'uid' => array('type'=>'integer', 'label' => 'Identifiant de périmetre'),
 
- 		'tag' => array('type'=>'tag', 'label' => 'Etiquettes')
 
- 	);
 
- 	//Colonnes indexées
 
- 	public $indexes = array('uid','scope');
 
- 	//remplis les métas (phones, mail principaux, phone et mails secondaires) par types si spécifiés
 
- 	public function meta($types = array(),$defaultOnly = false ){
 
- 		$filters = array('scope'=>'contact_person','uid'=>$this->id);
 
- 		if(!empty($types)) $filters['type:IN'] = implode(',',$types);
 
- 		if($defaultOnly) $filters['label'] = '';
 
- 		foreach(Contact::loadAll($filters) as $contact){
 
- 			if($contact->type==Contact::PHONE && $contact->label=='') $this->phone = $contact->value;
 
- 			if($contact->type==Contact::MOBILE && $contact->label=='') $this->mobile = $contact->value;
 
- 			if($contact->type=="mail" && $contact->label=='') $this->mail = $contact->value;
 
- 			if(!isset($this->meta[$contact->type])) $this->meta[$contact->type] = array();
 
- 			$this->meta[$contact->type][] = $contact;
 
- 		}
 
- 	}
 
- 	public function getTags(){
 
- 		$tags = explode(',', $this->tag);
 
- 		return array_values(array_filter($tags));
 
- 	}
 
- 	public function setTags($tags){
 
- 		if(is_array($tags)){
 
- 			$tags = array_filter($tags);
 
- 			$tags = implode(',', $tags);
 
- 		}
 
- 		$this->tag = ','.$tags.',';
 
- 	}
 
- 	public function toArray($decoded = false){
 
- 		$fields = parent::toArray();
 
- 		$fields['phone'] = $this->phone;
 
- 		$fields['mobile'] = $this->mobile;
 
- 		$fields['mail'] = $this->mail;
 
- 		$fields['meta'] = $this->meta;
 
- 		return $fields;
 
- 	}
 
- 	//récupere la liste d'entité et leurs entitées par défaut liées (téléphone et mail)
 
- 	public static function getAll($parameters = array()){
 
- 		$query =  '';
 
- 		$data = array();
 
- 		$query .= 'SELECT *,';
 
- 		$query .= '(SELECT value FROM '.Contact::tableName().' c WHERE c.type=? AND c.scope=? AND c.uid={{table}}.id AND (c.label=? OR c.label IS NULL) LIMIT 1) as phone';
 
- 		$query .= ',(SELECT value FROM '.Contact::tableName().' c WHERE c.type=? AND c.scope=? AND c.uid={{table}}.id AND (c.label=? OR c.label IS NULL) LIMIT 1) as mobile';
 
- 		$query .= ',(SELECT value FROM '.Contact::tableName().' c WHERE c.type=? AND c.scope=? AND c.uid={{table}}.id AND (c.label=? OR c.label IS NULL) LIMIT 1) as mail';
 
- 		$query .= ' FROM {{table}}';
 
- 		$data[] = Contact::PHONE;
 
- 		$data[] = 'contact_person';
 
- 		$data[] = '';
 
- 		$data[] = Contact::MOBILE;
 
- 		$data[] = 'contact_person';
 
- 		$data[] = '';
 
- 		$data[] = 'mail';
 
- 		$data[] = 'contact_person';
 
- 		$data[] = '';
 
- 		$query .= ' WHERE 1 ';
 
- 		if(!empty($parameters['where'])){
 
- 			foreach($parameters['where'] as $key=>$value){
 
- 				$query .= ' AND '.$key.' = ? ';
 
- 				$data[] = $value;
 
- 			}
 
- 		}
 
- 		$rows = array();
 
- 		foreach(self::staticQuery($query,$data,true) as $item){
 
- 			$item->phone = $item->foreign('phone');
 
- 			$item->mobile = $item->foreign('mobile');
 
- 			$item->mail = $item->foreign('mail');
 
- 			$rows[] = $item;
 
- 		}
 
- 		return $rows;
 
- 	}
 
- 	//liste des Civilité possibles
 
- 	public static function civilities($key=null){
 
- 		$items = array(
 
- 			'm' => array('label'=>'M.'),
 
- 			'mme' => array('label'=>'Mme.')
 
- 		);
 
- 		if(!isset($key)) return $items;
 
- 		return isset($items[$key]) ? $items[$key] : array('label'=>'Non définis');
 
- 	}
 
- 	public static function remove($id){
 
- 		if(!isset($id)) throw new Exception("ID se suppression non spécifié");
 
- 		self::deleteById($id);
 
- 		Contact::delete(array('scope'=>'contact_person','uid'=>$id));
 
- 	}
 
- 	//Sauvegarde l'entité et ses entitées de contact liées (téléphones, mail...)
 
- 	public function save_all(){
 
- 		parent::save();
 
- 		$currentMeta = array('phone'=>$this->phone,'mobile'=>$this->mobile,'mail'=>$this->mail);
 
- 		//Enregistrement des mails et téléphones princpaux dans la table de contacts (si renseignés)
 
- 		if(!isset($this->phone) && !isset($this->mobile) && !isset($this->mail)) return;
 
- 		$metaContacts = array('phone','mail','mobile');
 
- 		//récuperation des contacts par defaut existants pour cette personne
 
- 		$this->meta($metaContacts,true);
 
- 		foreach ($metaContacts as $metaContact) {
 
- 			//si le champ est renseigné
 
- 			if(isset($currentMeta[$metaContact])){
 
- 				//on récupere le champ existant ou on en créé un nouveau
 
- 				$contact = !empty($this->meta[$metaContact]) ? $this->meta[$metaContact][0] : new Contact();
 
- 				//on ne save que si la valeur a changée
 
- 				if($contact->value != $currentMeta[$metaContact]){
 
- 					$contact->value = $currentMeta[$metaContact];
 
- 					$contact->scope = 'contact_person';
 
- 					$contact->uid = $this->id;
 
- 					$contact->type = $metaContact;
 
- 					$contact->label = '';
 
- 					$contact->save();
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	public function avatar(){
 
- 		$mapping = array(
 
- 			'/pdg|directeur|dg/is' => 'job-direction.png',
 
- 			'/commercial(e)?|vente/is' => 'job-sales.png',
 
- 			'/communication|marketing|social/is' => 'job-communication.png',
 
- 			'/ingénieur|engineer|architect(e)?|recherche/is' => 'job-engineer.png',
 
- 			'/support|secrétaire|hotline/is' => 'job-support.png',
 
- 			'/ressources humaines|RH|HR/is' => 'job-rh.png',
 
- 			'/financ(e|ière|ier)|monnaie|comptab(le|bilitée)/is' => 'job-money.png',
 
- 			'/logistique|stock|atelier|livr(eur|aison)/is' => 'job-logistic.png',
 
- 		);
 
- 		$path = __ROOT__.SLASH.'img'.SLASH.'contact'.SLASH.'default-contact.png';
 
- 		foreach ($mapping as $regex => $relatedPath) {
 
- 			if( preg_match($regex,$this->job)  ){
 
- 				$path = __ROOT__.SLASH.'img'.SLASH.'contact'.SLASH.$relatedPath;
 
- 			}
 
- 		}
 
- 		return $path;
 
- 	}
 
- 	public function fullName(){
 
-         return ucfirst($this->firstname).' '.strtoupper($this->name);
 
-     }
 
-     public function toReadable(){
 
- 		$text = $this->civility.' '.$this->fullName();
 
- 		if(isset($this->phone) && !empty($this->phone)) $text .=' Tel: '.$this->phone;
 
- 		if(isset($this->mail) && !empty($this->mail)) $text .=' Mail : '.$this->mail;
 
- 		return $text;
 
- 	}
 
- }
 
- ?>
 
 
  |