Initial commit

This commit is contained in:
2020-01-27 08:56:08 +01:00
commit b7525048d6
27129 changed files with 3409855 additions and 0 deletions

View File

@@ -0,0 +1,216 @@
<?php
class DescripteurChamp {
const ACTION_OBLIGATOIRE = 'o';
const ACTION_FACULTATIF = 'f';
const ACTION_IGNORER = 'i';
const TYPE_STRING = 'string';
const TYPE_INT = 'int';
const TYPE_FLOAT = 'float';
const TYPE_EMAIL = 'email';
const TYPE_FILE = 'file';
const TYPE_CAPTCHA = 'captcha';
const CAPTCHA_URL_FORMAT = '%s/client/plugins/formesmagiques/captcha.php?sid=%s';
public $formvar;
public $var;
public $type;
public $action;
public $label;
public $tableau = false;
public $erreur = false;
public $valeur = "";
public function __construct($textdesc = false) {
if ($textdesc) {
$data = explode('|', $textdesc);
$formvar = $data[0];
$var = "#" . strtoupper($formvar);
if (isset($data[1])) {
switch($data[1]) {
case 'o' :
$action = self::ACTION_OBLIGATOIRE;
break;
case 'f' :
$action = self::ACTION_FACULTATIF;
break;
case 'i' :
$action = self::ACTION_IGNORER;
break;
case '' :
$action = self::ACTION_FACULTATIF;
break;
default :
die("Formesmagiques Action '".$data[1]."' sur le champ '$formvar' invalide. Valeurs valides: o, f, i");
}
}
$type = self::TYPE_STRING;
if (isset($data[2])) {
switch($data[2]) {
case 'chaine' :
$type = self::TYPE_STRING;
break;
case 'entier' :
$type = self::TYPE_INT;
break;
case 'reel' :
$type = self::TYPE_FLOAT;
break;
case 'email' :
$type = self::TYPE_EMAIL;
break;
case 'fichier' :
$type = self::TYPE_FILE;
break;
case 'captcha' :
$type = self::TYPE_CAPTCHA;
break;
case '' :
$type = self::TYPE_STRING;
break;
default :
die("Formesmagiques Type '".$data[2]."' sur le champ '$formvar' invalide. Valeurs valides: chaine, entier, reel, email, fichier, captcha");
}
}
$label = isset($data[3]) ? $data[3] : ucfirst($formvar);
$valeur = isset($data[4]) ? $data[4] : '';
$this->creer($formvar, $var, $type, $action, false, $label, $valeur);
}
}
public function creer($formvar, $var, $type, $action, $tableau, $label, $valeur)
{
$this->formvar = $formvar;
$this->var =$var;
$this->type =$type;
$this->action = $action;
$this->tableau = $tableau;
$this->label = $label;
$this->valeur = $valeur;
}
public function copie($champ)
{
$this->formvar = $champ->formvar;
$this->var =$champ->var;
$this->type =$champ->type;
$this->action = $champ->action;
$this->tableau = $champ->tableau;
$this->label = $champ->label;
$this->valeur = $champ->valeur;
}
public function controler($text) {
if ($this->action == self::ACTION_OBLIGATOIRE) {
switch($this->type) {
case DescripteurChamp::TYPE_STRING:
$text = filter_var($text, FILTER_SANITIZE_STRING);
if ($text == '') $text = false;
break;
case DescripteurChamp::TYPE_INT:
$text = filter_var($text, FILTER_VALIDATE_INT);
break;
case DescripteurChamp::TYPE_FLOAT:
$text = filter_var($text, FILTER_VALIDATE_FLOAT);
break;
case DescripteurChamp::TYPE_EMAIL:
$text = filter_var($text, FILTER_VALIDATE_EMAIL);
break;
case DescripteurChamp::TYPE_CAPTCHA:
$text = filter_var($text, FILTER_SANITIZE_STRING);
// Vérifier que le captcha est correct
if (md5(strtoupper(trim($text))) != $_SESSION['formesmagiques-captcha'][$this->formvar]) $text = false;
break;
}
if ($text === false) $this->erreur = true;
}
$text = trim($text);
$valeur = get_magic_quotes_gpc() ? stripslashes($text) : $text;
if ($this->tableau) {
$this->valeur[] = $valeur;
}
else {
$this->valeur = $valeur;
}
}
public function substitution($texte) {
// Pour un champ de type captcha
if ($this->type == self::TYPE_CAPTCHA) {
// Les URLs du captcha, sous forme de substitution simple.
$url = sprintf(self::CAPTCHA_URL_FORMAT, Variable::lire('urlsite'), $this->formvar);
$texte = str_replace($this->var.'_URL_IMAGE', $url, $texte);
$texte = str_replace($this->var.'_URL_CHANGER_IMAGE', $url.'&id='.rand(1,1000), $texte);
}
// Forme #varname[texte...]
$texte = preg_replace("/\\".$this->var."\[([^]]*)\]/", $this->erreur ? "\\1" : '', $texte);
if ($this->tableau) {
// Forme #varname(@), pour retrouver le nombre d'élements dans une variable de type tableau
$texte = str_replace("$this->var(@)", is_array($this->valeur) ? count($this->valeur) : '0', $texte);
// Forme #varname(index), pour les variables de type tableau)
if (preg_match_all("/\\$this->var\(([0-9]+)\)/", $texte, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
$idx = intval($match[1]) - 1;
$val = isset($this->valeur[$idx]) ? $this->valeur[$idx] : '';
$texte = str_replace($match[0], $val, $texte);
}
}
// Supprimer tous les #varname(n) qui n'ont pas été évalués précédemment.
$texte = preg_replace("/$this->var\([0-9]+\)/", '', $texte, -1, $count);
}
else {
// Forme #varname, pour par exemple #FILTRE_egalite(#varname||1||...)
$texte = str_replace($this->var, $this->valeur, $texte);
}
return $texte;
}
}
?>

View File

@@ -0,0 +1,183 @@
<?php
include_once(realpath(dirname(__FILE__)) . "/DescripteurChamp.class.php");
class DescripteurForm {
public $nom;
public $action;
public $sid = "";
public $urlsucces = "";
public $champ_erreur = false;
public $champs = array();
private $upload_dir;
public function __construct() {
$this->champ_erreur = new DescripteurChamp();
$this->champ_erreur->creer(
"__inutilise__",
"#ERREUR_SAISIE",
DescripteurChamp::TYPE_STRING,
DescripteurChamp::ACTION_FACULTATIF,
false,
"Erreur generale forme",
false
);
$this->upload_dir = __DIR__ .'/../upload';
$this->upload_url = urlfond() . '/client/plugins/formesmagiques/upload';
}
public function ajouter_champ($nom) {
$champ = new DescripteurChamp($nom);
$this->champs[$champ->formvar] = $champ;
return $champ;
}
public static function tri_par_longueur($a, $b) {
return (strlen($b->var) - strlen($a->var));
}
public function substitutions($texte) {
$texte = $this->champ_erreur->substitution($texte);
// Trier les variables par ordre décroissant de longueur
// pour éviter les écrasements du genre #NOM / #NOMBRE
$tmptab = $this->champs;
usort($tmptab, array($this, 'tri_par_longueur'));
foreach($tmptab as $champ) {
$texte = $champ->substitution($texte);
}
return $texte;
}
protected function substitutions_mail($texte) {
foreach($this->champs as $champ) {
$texte = str_replace("__".strtoupper($champ->nom)."__", $champ->valeur);
}
return $texte;
}
/*
* Traitement des paramètres saisis dans la form
*/
public function controle_params() {
$this->champ_erreur->erreur = false;
foreach($this->champs as &$champ) {
$champ->erreur = false;
$champ->valeur = '';
if ($champ->type != DescripteurChamp::TYPE_FILE) {
if (isset($_REQUEST[$champ->formvar])) {
$val = '';
if ($champ->tableau) {
$champ->valeur = array();
if (is_array($_REQUEST[$champ->formvar])) {
foreach($_REQUEST[$champ->formvar] as $valeur) {
$champ->controler($valeur);
}
}
else {
$champ->controler($_REQUEST[$champ->formvar]);
}
}
else {
$champ->controler($_REQUEST[$champ->formvar]);
}
}
}
else if (isset($_FILES[$champ->formvar])) {
$file = &$_FILES[$champ->formvar];
if ($champ->tableau) {
$champ->valeur = array();
$count = count($file['name']);
for ($idx = 0; $idx < $count; $idx++) {
if ($file['error'][$idx] != UPLOAD_ERR_NO_FILE) {
$ret = $this->upload_fichier(
$file['error'][$idx],
$file['name'][$idx],
$file['tmp_name'][$idx]
);
if ($ret !== false)
$champ->valeur[] = $ret;
else
$champ->erreur = true;
}
}
} else if ($file['error'] != UPLOAD_ERR_NO_FILE) {
$ret = $this->upload_fichier($file['error'], $file['name'], $file['tmp_name']);
if ($ret !== false)
$champ->valeur = $ret;
else
$champ->erreur = true;
}
}
if ($champ->action == DescripteurChamp::ACTION_OBLIGATOIRE && empty($champ->valeur)) {
$champ->erreur = true;
$this->champ_erreur->erreur = true;
}
}
}
protected function upload_fichier($err, $name, $tmp_name) {
if ($err == UPLOAD_ERR_OK) {
$filename = preg_replace('/[^A-Za-z0-9-_\.]/', '_', $name);
$idx = 1;
$prefix = '';
while (file_exists($this->upload_dir.'/'.$prefix.$filename)) {
$prefix = $idx . '_';
$idx++;
}
$localfile = $this->upload_dir . '/' . $prefix.$filename;
if (move_uploaded_file($tmp_name, $localfile)) {
return $this->upload_url . "/" . basename($localfile);
}
}
return false;
}
}
?>

View File

@@ -0,0 +1,34 @@
<?php
include_once(realpath(dirname(__FILE__)) . "/../../../../classes/Baseobj.class.php");
class Formulaire extends Baseobj {
var $id;
var $nom;
const TABLE = 'fm_formulaire';
var $table = self::TABLE;
var $bddvars = array('id', 'nom');
public function __construct($nom = false) {
parent::__construct();
if ($nom) $this->charger($nom);
}
public function init() {
$query = "
CREATE TABLE IF NOT EXISTS `".self::TABLE."` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nom` TEXT NOT NULL
)";
$this->query($query);
}
public function charger($nom) {
return $this->getVars("select * from $this->table where nom='".mysql_real_escape_string($nom)."'");
}
}
?>

View File

@@ -0,0 +1,41 @@
<?php
include_once(realpath(dirname(__FILE__)) . "/../../../../classes/Baseobj.class.php");
class FormulaireChamp extends Baseobj {
var $id;
var $instance;
var $nom;
var $label;
var $valeur;
const TABLE = 'fm_formulaire_champ';
var $table = self::TABLE;
var $bddvars = array('id', 'instance', 'nom', 'label', 'valeur');
public function __construct($id = false) {
parent::__construct();
if ($id) $this->charger($id);
}
public function init() {
$query = "
CREATE TABLE IF NOT EXISTS `".self::TABLE."` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`instance` INT(11) NOT NULL,
`nom` TEXT NOT NULL,
`label` TEXT NOT NULL,
`valeur` TEXT
)";
$this->query($query);
}
public function charger($id) {
$this->id = $id;
return parent::charger();
}
}
?>

View File

@@ -0,0 +1,41 @@
<?php
include_once(realpath(dirname(__FILE__)) . "/../../../../classes/Baseobj.class.php");
class FormulaireInstance extends Baseobj {
var $id;
var $formulaire;
var $date;
var $ip;
var $lu;
const TABLE = 'fm_formulaire_instance';
var $table = self::TABLE;
var $bddvars = array('id', 'formulaire', 'date', 'ip', 'lu');
public function __construct($id = false) {
parent::__construct();
if ($id) $this->charger($id);
}
public function init() {
$query = "
CREATE TABLE IF NOT EXISTS `".self::TABLE."` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`formulaire` INT(11) NOT NULL,
`date` INT(11) NOT NULL,
`ip` text NOT NULL,
`lu` INT(1) DEFAULT 0
)";
$this->query($query);
}
public function charger($id) {
$this->id = $id;
return parent::charger();
}
}
?>