Rev 51 | Rev 53 | 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)* service : service à l'adresse duquel envoyer le rapport, par défaut webmestre,* limité aux clefs de la liste self::$servicesAutorises* (exemple: cel)* email (DÉPRÉCIÉ) : adresse à laquelle envoyer le rapport, par défaut webmestre@tela-botanica.org,* limité aux valeurs de la liste self::$servicesAutorises* (exemple: cel_remarques@tela-botanica.org)* lang : langage (un squelette correspondant doit exister)* (exemple: en)** @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;/*** service de destination par défaut, si un service ou une adresse non autorisés sont spécifiés,* ou si aucun service ni adresse n'est spécifié*/const SERVICE_PAR_DEFAUT = 'webmestre';/*** liste des adresses de destination autorisées*/private static $servicesAutorises = array('eflore' => 'eflore_remarques@tela-botanica.org','pictoflora' => 'pictoflora_remarques@tela-botanica.org','identiplante' => 'identiplante_remarques@tela-botanica.org','cel' => 'cel_remarques@tela-botanica.org','coel' => 'coel_remarques@tela-botanica.org','webmestre' => 'webmestre@tela-botanica.org','accueil' => 'accueil@tela-botanica.org');protected $cheminLog;protected $pageSource;protected $serviceDestination;protected $emailDestination;protected $action;protected $langue;protected $langueDefaut;protected $description;protected $gravite;protected $navigateur;protected $systeme;protected $coordonnees;public function __construct($config, $parametres) {parent::__construct($config, $parametres);$this->pageSource = 'inconnue';$this->serviceDestination = self::SERVICE_PAR_DEFAUT;$this->emailDestination = self::$servicesAutorises[self::SERVICE_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'];$this->langueDefaut = $this->config['remarques']['langueDefaut'];}/*** 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_' . $this->langue . '.tpl.php';if (! file_exists($squelette)) {$squelette = dirname(__FILE__) . self::DS . 'squelettes' . self::DS . 'remarques_' . $this->langueDefaut . '.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']['service'] = $this->serviceDestination;$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['lang']) && $_GET['lang'] != '') {$this->langue = $_GET['lang'];} else {$this->langue = $this->langueDefaut;}if (isset($_GET['service']) && in_array($_GET['service'], array_keys(self::$servicesAutorises))) {$this->serviceDestination = $_GET['service'];$this->emailDestination = self::$servicesAutorises[$_GET['service']];} else {// Rétrocompatibilité (déprécié)if (isset($_GET['email']) && in_array($_GET['email'], self::$servicesAutorises)) {$this->emailDestination = $_GET['email'];$this->serviceDestination = array_search($_GET['email'], self::$servicesAutorises);}}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->serviceDestination . " <" . $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->serviceDestination . " <" . $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);}}?>