392 lines
10 KiB
PHP
392 lines
10 KiB
PHP
<?php
|
|
|
|
include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsClassiques.class.php");
|
|
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Message.class.php");
|
|
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Messagedesc.class.php");
|
|
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Variable.class.php");
|
|
|
|
include_once(realpath(dirname(__FILE__)) . "/classes/DescripteurForme.class.php");
|
|
include_once(realpath(dirname(__FILE__)) . "/classes/Formulaire.class.php");
|
|
include_once(realpath(dirname(__FILE__)) . "/classes/FormulaireInstance.class.php");
|
|
include_once(realpath(dirname(__FILE__)) . "/classes/FormulaireChamp.class.php");
|
|
|
|
class Formesmagiques extends PluginsClassiques
|
|
{
|
|
|
|
const VERSION = '0.6.2';
|
|
const MODULE = 'formesmagiques';
|
|
const NOMMODULE = 'Formesmagiques';
|
|
const PREFIXE = 'frmg_';
|
|
|
|
|
|
|
|
/* public $id;
|
|
public $type;
|
|
public $idobjet;
|
|
public $alias;
|
|
public $erreur = false;
|
|
|
|
const TABLE = "formesmagiques";
|
|
public $table=self::TABLE;
|
|
|
|
var $bddvars = array('id', 'type', 'idobjet', 'alias');*/
|
|
var $id;
|
|
var $nom;
|
|
var $prenom;
|
|
var $email;
|
|
var $tel;
|
|
var $sujet;
|
|
var $message;
|
|
var $adresse;
|
|
var $cpostal;
|
|
var $ville;
|
|
var $date;
|
|
var $lu;
|
|
public $erreur = false;
|
|
|
|
var $table = "contact";
|
|
var $bddvars = array("id","nom","prenom","email","tel","sujet","message", "adresse", "cpostal", "ville", "date","lu");
|
|
|
|
private $upload_dir;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct(self::MODULE);
|
|
$this->upload_dir = realpath(dirname(__FILE__)) . '/upload';
|
|
}
|
|
|
|
|
|
function Formesmagiques(){
|
|
$this->PluginsClassiques();
|
|
}
|
|
|
|
function init()
|
|
{
|
|
|
|
|
|
$this->ajout_desc(
|
|
self::NOMMODULE,
|
|
"Plugin Formes Magiques",
|
|
"Ce plugin permet de créer très simplement des formulaires expédiés par email et/ou stockés en base de donnée",
|
|
1);
|
|
|
|
|
|
|
|
if (! (is_dir($this->upload_dir) || mkdir($this->upload_dir, 0777, true))) {
|
|
die("Ne peut créer le dossier de stockage des fichiers $this->upload_dir. Merci de vérifier les permissions.");
|
|
}
|
|
|
|
|
|
|
|
$fo = new Formulaire;
|
|
$fo->init();
|
|
|
|
$fi = new FormulaireInstance();
|
|
$fi->init();
|
|
|
|
$fc = new FormulaireChamp();
|
|
$fc->init();
|
|
|
|
$variable = new Variable();
|
|
if(!$variable->charger("contact")){
|
|
$emailcontact = new variable();
|
|
$emailcontact->charger("emailcontact");
|
|
|
|
$variable->nom = "contact";
|
|
$variable->valeur = $emailcontact->valeur;
|
|
$variable->add();
|
|
}
|
|
|
|
$message = new Message();
|
|
if (! $message->charger("envoiformulaire")) {
|
|
$message->nom = "envoiformulaire";
|
|
$lastid = $message->add();
|
|
$messagedesc = new Messagedesc();
|
|
$messagedesc->message = $lastid;
|
|
$messagedesc->intitule = "Message d'envoi de formulaire Formes Magiques";
|
|
$messagedesc->lang = 1;
|
|
$messagedesc->titre = "Envoi du formulaire __TITRE_FORMULAIRE__";
|
|
$messagedesc->chapo = "";
|
|
$messagedesc->descriptiontext = "
|
|
Bonjour,
|
|
|
|
Le formulaire __TITRE_FORMULAIRE__ a été envoyé à votre intention le __DATE_ENVOI__ à __HEURE_ENVOI__ depuis l'adresse IP __IP_ENVOI__. Les informations indiquées sont les suivantes :
|
|
|
|
<CHAMPS>
|
|
|
|
- __CHAMP_LABEL__ : __CHAMP_VALEUR__
|
|
|
|
</CHAMPS>
|
|
|
|
Envoyé depuis le site.
|
|
";
|
|
|
|
|
|
|
|
$messagedesc->description = "
|
|
<p>Bonjour,</p>
|
|
|
|
<p>Le formulaire __TITRE_FORMULAIRE__ a été envoyé à votre intention le __DATE_ENVOI__ à __HEURE_ENVOI__ depuis l'adresse IP __IP_ENVOI__. Les informations indiquées sont les suivantes :</p>
|
|
|
|
<ul>
|
|
|
|
<CHAMPS>
|
|
|
|
<li> __CHAMP_LABEL__ : __CHAMP_VALEUR__</li>
|
|
|
|
</CHAMPS>
|
|
|
|
</ul>
|
|
|
|
<p>Envoyé depuis le site.</p>
|
|
|
|
";
|
|
$messagedesc->add();
|
|
}
|
|
|
|
$query = "CREATE TABLE `contact` (
|
|
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
|
`nom` VARCHAR( 255 ) NOT NULL ,
|
|
`prenom` VARCHAR( 255 ) NOT NULL ,
|
|
`email` VARCHAR( 255 ) NOT NULL ,
|
|
`tel` VARCHAR( 30 ) NOT NULL ,
|
|
`sujet` VARCHAR( 255 ) NOT NULL ,
|
|
`message` TEXT NOT NULL ,
|
|
`adresse` VARCHAR( 255 ) NOT NULL ,
|
|
`cpostal` VARCHAR( 255 ) NOT NULL ,
|
|
`ville` VARCHAR( 255 ) NOT NULL ,
|
|
`date` DATETIME NOT NULL ,
|
|
`lu` INT NOT NULL
|
|
)";
|
|
$this->query($query);
|
|
|
|
}
|
|
|
|
function charger($id){
|
|
return $this->getVars("select * from $this->table where id=\"$id\"");
|
|
}
|
|
|
|
function destroy()
|
|
{
|
|
// $this->query("DROP TABLE `".self::TABLE."`");
|
|
}
|
|
|
|
|
|
function action(){
|
|
global $action;
|
|
|
|
switch($action){
|
|
case "contact":
|
|
$this->crea_contact();
|
|
break;
|
|
}
|
|
}
|
|
|
|
function demarrage(){
|
|
if(!isset($_SESSION["contact"])){
|
|
$_SESSION["contact"] = new Contact();
|
|
}
|
|
}
|
|
|
|
function crea_contact(){
|
|
$urlsite = new Variable("urlsite");
|
|
|
|
$contact = new Contact();
|
|
$contact->nom = strip_tags($_POST["nom"]);
|
|
$contact->prenom = strip_tags($_POST["prenom"]);
|
|
if( preg_match("/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z.]+$/",$_POST["email"])) $contact->email = strip_tags($_POST["email"]);
|
|
$contact->tel = strip_tags($_POST["tel"]);
|
|
$contact->sujet = strip_tags($_POST["sujet"]);
|
|
$contact->message = strip_tags($_POST["message"]);
|
|
$contact->adresse = strip_tags($_POST["adresse"]);
|
|
$contact->cpostal = strip_tags($_POST["cpostal"]);
|
|
$contact->ville = strip_tags($_POST["ville"]);
|
|
|
|
$contact->date = date("Y-m-d H:i:s");
|
|
$contact->lu = 0;
|
|
$contact->add();
|
|
}
|
|
|
|
public function traiter_formulaire($formdesc) {
|
|
|
|
list($nomaction, $parametres) = explode(':', $formdesc->action);
|
|
$nomaction = strtolower($nomaction);
|
|
|
|
if ($nomaction == 'email') {
|
|
$this->traiter_formulaire_email($formdesc, $parametres);
|
|
} else {
|
|
die("Action '$action' inconnue pour la form $formdesc->nom");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private function traiter_formulaire_bdd($formdesc, $parametres) {
|
|
|
|
$form = new Formulaire();
|
|
if (! $form->charger($formdesc->nom)) {
|
|
$form->nom = $formdesc->nom;
|
|
$form->add();
|
|
$form->charger($formdesc->nom);
|
|
}
|
|
|
|
|
|
|
|
$instance = new FormulaireInstance();
|
|
$instance->formulaire = $form->id;
|
|
$instance->date = time();
|
|
$instance->ip = $_SERVER[REMOTE_ADDR];
|
|
$instance->lu = false;
|
|
$id = $instance->add();
|
|
|
|
foreach($formdesc->champs as $champ) {
|
|
// Ignorer les captchas
|
|
if ($champ->type == DescripteurChamp::TYPE_CAPTCHA) continue;
|
|
$bd = new ChampInstance();
|
|
$bd->instance = $id;
|
|
$bd->nom = $champ->formvar;
|
|
$bd->label = $champ->label;
|
|
$bd->valeur = $champ->valeur;
|
|
$bd->add();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private function traiter_formulaire_email($formdesc, $parametres) {
|
|
$adresses = explode(',', $parametres);
|
|
$message = new Message("envoiformulaire");
|
|
$md = new Messagedesc($message->id);
|
|
$sujet = $this->substitutions_email($md->titre, $formdesc);
|
|
$texte = $this->substitutions_email($md->descriptiontext, $formdesc);
|
|
$textehtml = $this->substitutions_email($md->description, $formdesc);
|
|
|
|
foreach($adresses as $adresse) {
|
|
$res = Mail::envoyer(
|
|
$adresse, $adresse,
|
|
Variable::lire('nomsite'), Variable::lire('emailfrom'),
|
|
$sujet,
|
|
$textehtml,
|
|
$texte
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private function substitutions_email($texte, $formdesc) {
|
|
$texte = str_replace("__TITRE_FORMULAIRE__", $formdesc->nom, $texte);
|
|
$texte = str_replace("__DATE_ENVOI__", date("d/m/Y"), $texte);
|
|
$texte = str_replace("__HEURE_ENVOI__", date("H:i:s"), $texte);
|
|
$texte = str_replace("__IP_ENVOI__", $_SERVER['REMOTE_ADDR'], $texte);
|
|
if (preg_match_all("`<CHAMPS>(.+)</CHAMPS>`s", $texte, $matches, PREG_SET_ORDER)) {
|
|
foreach($matches as $match) {
|
|
$res = '';
|
|
foreach($formdesc->champs as $champ) {
|
|
if ($champ->type == DescripteurChamp::TYPE_CAPTCHA) continue;
|
|
$tmp = $match[1];
|
|
$tmp = str_replace("__CHAMP_NOM__", $champ->formvar, $tmp);
|
|
$tmp = str_replace("__CHAMP_LABEL__", $champ->label, $tmp);
|
|
$tmp = str_replace("__CHAMP_VALEUR__", $champ->valeur, $tmp);
|
|
$res .= $tmp;
|
|
}
|
|
|
|
$texte = str_replace($match[0], $res, $texte);
|
|
}
|
|
}
|
|
return $texte;
|
|
}
|
|
|
|
|
|
|
|
public function analyse() {
|
|
global $res;
|
|
$matches = array();
|
|
|
|
// Retrouver le texte réel de la boucle, qui est en fait occulté par le parser...
|
|
if (preg_match_all('`<FORMULAIRE_([^ ]+) ([^>]*)>(:?(.*))</FORMULAIRE_\1>`Us', $res, $matches, PREG_SET_ORDER)) {
|
|
foreach($matches as $match) {
|
|
$nom = $match[1];
|
|
$args = $match[2];
|
|
$formtexte = $match[3];
|
|
$sid = 'frm_'.$nom;
|
|
$formtags = array('titre', 'traitement', 'urlsucces');
|
|
$traitement = lireTag($args, "traitement"); // BD / EMAIL / THELIA:{connexion|nouveau}
|
|
$titre = lireTag($args, "titre");
|
|
$urlsucces = lireTag($args, "urlsucces");
|
|
|
|
// Compat 0.6.0
|
|
|
|
if (empty($traitement)) {
|
|
$traitement = lireTag($args, "action");
|
|
if (! empty($traitement)) {
|
|
$formtags[] = 'action';
|
|
}
|
|
}
|
|
|
|
$formdesc = new DescripteurForm();
|
|
$formdesc->sid = $sid;
|
|
$formdesc->nom = empty($titre) ? $nom : $titre;
|
|
$formdesc->action = $traitement != '' ? $traitement : 'bd';
|
|
$formdesc->urlsucces = str_replace("&", "&", $urlsucces);
|
|
$avec_file = false;
|
|
$inpmatches = array();
|
|
|
|
if (preg_match_all('/name[\s]*=[\s]*"([^"]+)"/', $formtexte, $inpmatches, PREG_SET_ORDER)) {
|
|
foreach($inpmatches as $inpmatch) {
|
|
$champ = $formdesc->ajouter_champ($inpmatch[1]);
|
|
$avec_file |= $champ->type == DescripteurChamp::TYPE_FILE;
|
|
$formtexte = str_replace($inpmatch[0], 'name="'.$champ->formvar.'"', $formtexte);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Traitement des paramètres, si présents
|
|
|
|
if (isset($_REQUEST['form_sid']) && $_REQUEST['form_sid'] == $sid) {
|
|
$formdesc->controle_params();
|
|
|
|
if (! $formdesc->champ_erreur->erreur) {
|
|
|
|
$this->traiter_formulaire($formdesc);
|
|
|
|
if ($formdesc->urlsucces != '') {
|
|
redirige($formdesc->urlsucces);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$texte = '<form name="'.$nom.'"'; // action="'.htmlentities(url_page_courante()).'"';
|
|
|
|
// Ajouter tous les attributs qu'on ne connait pas.
|
|
|
|
if (preg_match_all("/([a-zA-Z]+)=\"[^\"]+\"/", $args, $tagmatches, PREG_SET_ORDER)) {
|
|
foreach($tagmatches as $tagmatch) {
|
|
if (! in_array($tagmatch[1], $formtags)) $texte .= ' '.$tagmatch[0];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Upload -> multipart/form-data !
|
|
|
|
if ($avec_file != '') $texte .= ' enctype="multipart/form-data"';
|
|
$texte .= ">\n";
|
|
$texte .= '<input type="hidden" name="form_sid" value="'.$sid.'" />'."\n";
|
|
$texte .= '<input type="hidden" name="action" value="formesmagiques" />'."\n";
|
|
$texte .= $formdesc->substitutions($formtexte);
|
|
$texte .= '</form>'."\n";
|
|
$res = str_replace($match[0], $texte, $res);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|