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 : - __CHAMP_LABEL__ : __CHAMP_VALEUR__ Envoyé depuis le site. "; $messagedesc->description = "

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 :

Envoyé depuis le site.

"; $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("`(.+)`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('`]*)>(:?(.*))`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 = '
multipart/form-data ! if ($avec_file != '') $texte .= ' enctype="multipart/form-data"'; $texte .= ">\n"; $texte .= ''."\n"; $texte .= ''."\n"; $texte .= $formdesc->substitutions($formtexte); $texte .= '
'."\n"; $res = str_replace($match[0], $texte, $res); } } } } ?>