Rev 12 | Rev 19 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Formulaire de remarques assisté* - envoie un email et écrit dans un fichier log** Utilisation: http://www.tela-botanica.org/widget:reseau:remarques* Paramètres GET (optionnels):* pageSource : URL de la page depuis laquelle l'utilisateur a cliqué sur "nous contacter"* (exemple: http://www.tela-botanica.org/appli:cel)* email : adresse à laquelle envoyer le rapport, par défaut webmestre@tela-botanica.org, limité à la liste self::$emailsAutorises* (exemple: cel_remarques@tela-botanica.org)** @author Mathias Chouet <mathias@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @version 0.1* @copyright 2014, Tela Botanica (accueil@tela-botanica.org)*/class Remarques extends WidgetCommun {const DS = DIRECTORY_SEPARATOR;/*** adresse de destination par défaut, si une adresse non autorisée est spécifiée,* ou si aucune adresse n'est spécifiée*/const EMAIL_PAR_DEFAUT = 'webmestre@tela-botanica.org';/*** liste des adresses de destination autorisées*/private static $emailsAutorises = array('eflore_remarques@tela-botanica.org','pictoflora_remarques@tela-botanica.org','identiplante_remarques@tela-botanica.org','cel_remarques@tela-botanica.org','coel_remarques@tela-botanica.org','webmestre@tela-botanica.org','mathias@tela-botanica.org');protected $cheminLog;protected $pageSource;protected $emailDestination;protected $action;protected $description;protected $gravite;protected $navigateur;protected $systeme;protected $coordonnees;public function __construct($config, $parametres) {parent::__construct($config, $parametres);$this->pageSource = 'inconnue';$this->emailDestination = self::EMAIL_PAR_DEFAUT;$this->action = null;$this->description = null;$this->gravite = null;$this->navigateur = null;$this->systeme = null;$this->coordonnees = null;$this->cheminLog = $this->config['remarques']['cheminFichierLog'];}/*** Méthode appelée par défaut pour charger ce widget*/public function executer() {$this->collecterParametres();$squelette = dirname(__FILE__) . self::DS . 'squelettes' . self::DS . 'remarques.tpl.php';$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/remarques/squelettes/css/defaut.css');$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/remarques/squelettes/js/defaut.js');$widget['donnees']['email'] = $this->emailDestination;$widget['donnees']['page'] = $this->pageSource;$widget['donnees']['envoye'] = false;if ($this->action === 'envoyer') {$widget['donnees']['envoye'] = true;// 1) entrée dans le logtry {$this->log();} catch (Exception $e) {echo "Erreur lors de la création de l'entrée dans le fichier log<br/>";}// 2) emailtry {$this->email();} catch (Exception $e) {echo "Erreur lors de l'envoi de l'email<br/>";}}$contenu = $this->traiterSquelettePhp($squelette, $widget['donnees']);$this->envoyer($contenu);}// paramètres du widget en GET et du formulaire en POSTprotected function collecterParametres() {if (isset($_GET['pageSource']) && $_GET['pageSource'] != '') {$this->pageSource = $_GET['pageSource'];}if (isset($_GET['email']) && in_array($_GET['email'], self::$emailsAutorises)) {$this->emailDestination = $_GET['email'];}if (isset($_POST['action']) && $_POST['action'] != '') {$this->action = $_POST['action'];}// contenu du formulaireif (isset($_POST['description']) && $_POST['description'] != '') {$this->description = stripslashes($_POST['description']);}if (isset($_POST['gravite']) && $_POST['gravite'] != '') {$this->gravite = $_POST['gravite'];}if (isset($_POST['navigateur']) && $_POST['navigateur'] != '') {$this->navigateur = stripslashes($_POST['navigateur']);}if (isset($_POST['systeme']) && $_POST['systeme'] != '') {$this->systeme = stripslashes($_POST['systeme']);}if (isset($_POST['coordonnees']) && $_POST['coordonnees'] != '') {$this->coordonnees = stripslashes($_POST['coordonnees']);}}// ajoute une entrée au logprotected function log() {$contenu = ''.date("Y-m-d h:i:s") . "\n"."Pour: " . $this->emailDestination . "\n"."Page: " . $this->pageSource . "\n"."User agent: " . $_SERVER['HTTP_USER_AGENT'] . "\n"."Contributeur: " . $this->coordonnees . "\n"."Gravité: " . $this->gravite . "\n"."Navigateur: " . $this->navigateur . "\n"."Système: " . $this->systeme . "\n"."Description:\n " . str_replace("\n", "\n ", $this->description)."\n\n-----------------------------------------------------------------------\n\n";file_put_contents($this->cheminLog, $contenu, FILE_APPEND);}// envoie un emailprotected function email() {$contenu = ''.date("Y-m-d h:i:s") . "\n"."Pour: " . $this->emailDestination . "\n"."Page: " . $this->pageSource . "\n"."User agent: " . $_SERVER['HTTP_USER_AGENT'] . "\n"."Contributeur: " . $this->coordonnees . "\n"."Gravité: " . $this->gravite . "\n"."Navigateur: " . $this->navigateur . "\n"."Système: " . $this->systeme . "\n"."Description:\n " . str_replace("\n", "\n ", $this->description);$entetes = 'Content-Type: text/plain; charset="utf-8" '.'Content-Transfer-Encoding: 8bit';$sujet = substr($this->description, 0, 25).'... '.'('.($this->coordonnees == '' ? 'inconnu' : $this->coordonnees).')';// mode charlot - mais y a rien dans le framework pour faire mieuxmail($this->emailDestination, $sujet, $contenu, $entetes);}}?>