Rev 7 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Formulaire de rapport d'erreur assisté** @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 RapportErreur extends WidgetCommun {const DS = DIRECTORY_SEPARATOR;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 = 'webmestre@tela-botanica.org';$this->action = null;$this->description = null;$this->gravite = null;$this->navigateur = null;$this->systeme = null;$this->coordonnees = null;$this->cheminLog = $this->config['rapport_erreur']['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 . 'rapportErreur.tpl.php';$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/rapporterreur/squelettes/css/defaut.css');$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 = $_POST['description'];}if (isset($_POST['gravite']) && $_POST['gravite'] != '') {$this->gravite = $_POST['gravite'];}if (isset($_POST['navigateur']) && $_POST['navigateur'] != '') {$this->navigateur = $_POST['navigateur'];}if (isset($_POST['systeme']) && $_POST['systeme'] != '') {$this->systeme = $_POST['systeme'];}if (isset($_POST['coordonnees']) && $_POST['coordonnees'] != '') {$this->coordonnees = $_POST['coordonnees'];}}// ajoute une entrée au logprotected function log() {$contenu = '';$contenu .= date("Y-m-d h:i:s") . "\n";$contenu .= "Pour: " . $this->emailDestination . "\n";$contenu .= "Page: " . $this->pageSource . "\n";$contenu .= "Coordonnées: " . $this->coordonnees . "\n";$contenu .= "Gravité: " . $this->gravite . "\n";$contenu .= "Navigateur: " . $this->navigateur . "\n";$contenu .= "Système: " . $this->systeme . "\n";$contenu .= "Description:\n " . str_replace("\n", "\n ", $this->description);$contenu .= "\n\n-----------------------------------------------------------------------\n\n";file_put_contents($this->cheminLog, $contenu, FILE_APPEND);}// envoie un emailprotected function email() {$contenu = '';$contenu .= date("Y-m-d h:i:s") . "\n";$contenu .= "Pour: " . $this->emailDestination . "\n";$contenu .= "Page: " . $this->pageSource . "\n";$contenu .= "Coordonnées: " . $this->coordonnees . "\n";$contenu .= "Gravité: " . $this->gravite . "\n";$contenu .= "Navigateur: " . $this->navigateur . "\n";$contenu .= "Système: " . $this->systeme . "\n";$contenu .= "Description:\n " . str_replace("\n", "\n ", $this->description);$sujet = "[Rapport d'erreur] - " . 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);}}?>