| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 | <?phpglobal $_,$conf;switch($_['action']){	//GESTIONS DES CONTACTS		//Enregistrement (ajout/modification)	case 'contact_save':		Action::write(function(&$response){			global $myUser,$_;			if(!$myUser->can('example','edit')) throw new Exception("Permissions insuffisantes",403);			require_once(__DIR__.SLASH.'Contact.class.php');			require_once(__ROOT__.PLUGIN_PATH.'notification'.SLASH.'Notification.class.php');			$contact = Contact::provide();			//on garde l'ancien objet a l'instant t pour le log comparatif (voir en fin d'action)			$oldcontact = clone $contact;						$title = isset($contact->id) ? 'Édition d\'un contact' : 'Création d\'un contact';			$msg = isset($contact->id) ? 'Le contact '.$contact->label.' a été édité' : 'Création du contact '.$contact->label;			$contact->fromArray($_);			$contact->birth = timestamp_date($contact->birth);			$contact->hour = timestamp_hour($contact->hour);			$contact->save();			//Ajout des fichiers joints			if(!empty($_['document_temporary'])){				$files = json_decode($_['document_temporary'],true);				foreach($files as $file){					$from = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? File::temp().utf8_decode($file['path']) : File::temp().$file['path'];					$to = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? utf8_decode($file['name']) : $file['name'];					File::move($from, 'contact'.SLASH.'documents'.SLASH.$contact->id.SLASH.$to);				}			}					//Ajout de l'avatar a la base de media 			if(!empty($_FILES['avatar']) &&  $_FILES['avatar']['size']!=0 ){								$logo = File::upload('avatar','contact'.SLASH.$contact->id.'.{{ext}}',1048576,array('jpg','png','jpeg'));				Image::resize($logo['absolute'],200,200);				Image::toJpg($logo['absolute']);			}			Plugin::callHook('emit_notification', array(				array(					'label' => $title,					'html' => $msg,					'meta' => array(						'link' =>  ROOT_URL.'/index.php?module=example&page=sheet&id='.$contact->id					)				),				array($myUser->login)			));			$response['id'] = $contact->id;			$response['contact'] = $contact->label;						//Exemple de mise en place de logs comparatif			Log::compare($oldcontact,$contact,function(&$log){				//ajout d'une info supplémentaire sur le log comparatif				$log->label['meta_info'] =  "example";			});		});	break;	//Recherche d'une liste	case 'contact_search':	Action::write(function(&$response){		global $myUser,$_;		if(!$myUser->can('example','read')) throw new Exception("Permissions insuffisantes",403);		require_once(__DIR__.SLASH.'Contact.class.php');		$query = 'SELECT * FROM {{table}} WHERE 1';		$data = array();		//Recherche simple		if(!empty($_['filters']['keyword'])){			$query .= ' AND label LIKE ?';			$data[] = '%'.$_['filters']['keyword'].'%';		}		//Recherche avancée		if(isset($_['filters']['advanced'])) filter_secure_query($_['filters']['advanced'],array('label','phone','birth','author','vehicle'),$query,$data);				//Tri des colonnes		if(isset($_['sort'])) sort_secure_query($_['sort'],array('label','phone'),$query,$data);		//Pagination		$response['pagination'] = Contact::paginate(2,(!empty($_['page'])?$_['page']:0),$query,$data);				//Mise en forme des résultats		foreach (Contact::staticQuery($query,$data,true) as $contact) {			$row = $contact->toArray(true);			$row['created'] = date('d/m/Y H:i',$contact->created);			$row['updated'] = date('d/m/Y H:i',$contact->updated);						$row['author'] = array();			foreach (explode(',',$contact->author) as $login) {				if(is_numeric($login)){					//rank					$item = Rank::getById($login);					$item = !$item ? new Rank(): $item;					$row['author'][] =$item->label;				}else{					//user					$row['author'][] = User::byLogin($login)->fullName();				}							}			$row['author'] = implode(',',$row['author']);			$row['birth'] = date('d/m/Y',$contact->birth);						$row['picture'] = $contact->picture().'&v='.time();			$response['rows'][]= $row;		}	});	break;	//Suppression par id	case 'contact_delete':	Action::write(function(&$response){		global $myUser,$_;		if(!$myUser->can('example','delete')) throw new Exception("Permissions insuffisantes",403);		require_once(__DIR__.SLASH.'Contact.class.php');		if(!isset($_['id']) || !is_numeric($_['id'])) throw new Exception("Id non spécifié ou non numerique");				//Exemple de mise en place de logs comparatif		Log::compare(Contact::getById($_['id']),false);		//suppression 		Contact::deleteById($_['id']);	});	break;	//Suppression document	case 'contact_delete_document':	Action::write(function(&$response){		global $myUser,$_;		if(!$myUser->can('example','delete')) throw new Exception("Permissions insuffisantes",403);		require_once(__DIR__.SLASH.'Contact.class.php');		if(!isset($_['path']) ) throw new Exception("Chemin non spécifié ou non numerique");		//Le premier argument est un namspace de sécurité 		//et assure que le fichier sera toujours cloisoné dans un contexte file/contact/documents		$path = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? utf8_decode($_['path']) : $_['path'];		File::delete('contact'.SLASH.'documents',$path);	});	break;	case 'contact_add_document':	Action::write(function(&$response){		global $myUser,$_;		if(!$myUser->can('example','edit')) throw new Exception("Permissions insuffisantes",403);		require_once(__DIR__.SLASH.'Contact.class.php');		$contact = Contact::provide();		$contact->save();		foreach ($_['files'] as $file) {			$name = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? utf8_decode($file['name']) : $file['name'];			$row = File::move(File::temp().$file['path'],'contact'.SLASH.'documents'.SLASH.$contact->id.SLASH.$name);			$row['url'] = 'action.php?action=contact_download_document&path='.SLASH.$contact->id.SLASH.rawurlencode($file['name']);			$row['oldPath'] = $file['path'];			$response['files'][] = $row;		}		$response['id'] = $contact->id;	});	break;	//Téléchargement des documents	case 'contact_download_document':		global $myUser,$_;		if(!$myUser->can('example','read')) throw new Exception("Permissions insuffisantes",403);		$path = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? utf8_decode($_['path']) : $_['path'];		File::downloadFile(File::dir().'contact'.SLASH.'documents'.SLASH.$path);	break;	//Affichage de l'avatar	case 'contact_download_picture':		global $myUser,$_;		if(!$myUser->can('example','read')) throw new Exception("Permissions insuffisantes",403);		try{			File::downloadFile(File::dir().'contact'.SLASH.$_['contact'].'.'.$_['extension']);		} catch(Exception $e){			File::downloadFile('img'.SLASH.'default-avatar.png');		}	break;	//Suppression image contact	case 'contact_avatar_delete':	    Action::write(function(&$response){	        global $myUser,$_;	        if(!$myUser->can('example','edit')) throw new Exception("Permissions insuffisantes",403);			require_once(__DIR__.SLASH.'Contact.class.php');	        $item = Contact::provide();	        if(!$item) throw new Exception("Aucun contact ne correspond en base");	        foreach (glob(__ROOT__.FILE_PATH.'contact'.SLASH.$item->id.".*") as $filename)	            unlink($filename);	        if(!file_exists(__ROOT__.FILE_PATH.'contact'.SLASH.'.thumbnails')) return;	        foreach (glob(__ROOT__.FILE_PATH.'contact'.SLASH.'.thumbnails'.SLASH.$item->id.".*") as $filename) {	            unlink($filename);	        }	    });	break;	//Récupération card d'un contact	case 'example_contact_card':		Action::write(function(&$response){			global $myUser,$myFirm,$_;			if(!$myUser->can('example','read')) throw new Exception("Permissions insuffisantes",403);			require_once(__DIR__.SLASH.'Contact.class.php');			$contact = Contact::provide();			ob_start();			require_once(__DIR__.SLASH.'card.example.contact.php');			$stream = ob_get_clean();			$response['content'] = $stream;		});	break;		default : 		global $myFirm;		if($myFirm->has_plugin('fr.idleman.stripe') && $_['action']=='example_stripe_pay'){			Action::write(function(&$response){				global $_;				//paye la somme de 20 €				$response = stripe_payment($_['token'],22.5,'Description paiement','Description acheteur');	        });		}	break;}?>
 |