<?php
/*******************************************************************************
 *   Sample External Page with form and captcha
 *******************************************************************************
 *   GuppY PHP Script - version 6.0
 *   CeCILL Copyright (C) 2004-2013 by Laurent Duveau
 *   Initiated by Laurent Duveau and Nicolas Alves
 *   Web site = https://www.freeguppy.org/
 *   e-mail   = guppy@freeguppy.org
 *   V6 developed by Lud Bienaimé
 *      with the participation of the GuppY Team
 *******************************************************************************
 *   Latest Changes :
 * v6.00.00 (December 15, 2019) : initial release
 ******************************************************************************/
 /*
                ////////////////////////////////////////////////////////////
                //                                                        //
                //  CE SCRIPT EST UN MODELE, VEUILLEZ UTILISER UNE COPIE  //
                //  THIS SCRIPT IS A MODEL, PLEASE USE A COPY             //
                //                                                        //
                ////////////////////////////////////////////////////////////
 */

// NE PAS SUPPRIMER NI DEPLACER ces déclarations
header('Pragma: no-cache');
// pour une utilisation de ce script à la racine du site modifier
// la définition de CHEMIN ci-dessous comme ceci : define("CHEMIN", '');
define("CHEMIN", '../'); // chemin relatif du dossier /pages
include CHEMIN.'inc/includes.inc';
$message = $erreur = '';

///////////////////////////////////////////////////////////////////////////
// traitement du captcha, NE PAS SUPPRIMER NI DEPLACER
$crypt   = isset($_POST['crypt']) ? strip_tags($_POST['crypt']) : NULL;
$cryptok = (!$crypt) ? false : chk_crypt($crypt);
$err_6= '';
///////////////////////////////////////////////////////////////////////////
// variables de fonctionnement à ADAPTER, NE PAS SUPPRIMER NI DEPLACER
$formgroup = ''; // autorisation d'accès : '' = tout le monde, 'all_members' = tous les membres, 'nom_du_groupe' = nom d'un groupe
$formName  = 'sample-form'; // nom de ce script sans l'extension, obligatoire
$isCaptcha = true; // mettre true ou false
$myIcon    = ''; // nom de l'icône (nom.ext) pour le titre, laisser vide si on ne veut pas d'icône
$class     = 'FRM1'; // nom de la règle css pour personnaliser le titre
$lstTo     = ''; // mettre 1 ou plusieurs emails de destinataires séparés par un espace
$isRGPD    = true; // affichage des conditions du RGPD si le formulaire contient des données parsonnelles, mettre true ou false
if ($lng == 'fr') {
    $topmess = 'Résultats de la semaine'; // indiquez votre titre, obligatoire
    $subject = 'Information'; // sujet du mail, obligatoire
} else {
    $topmess = 'Results of the week'; // indiquez votre titre, obligatoire
    $subject = 'Information'; // sujet du mail, obligatoire
}
///////////////////////////////////////////////////////////////////////////
// dispositif contre les failles de sécurité, NE PAS SUPPRIMER NI DEPLACER
if (import('validForm', 'GET') != NULL) die('STOP ! Variable $validForm : illegal origine !');
$validForm = import('validForm', 'POST');
$ctrl_spam = import('code_pseudo', 'POST');
$tconfig   = import('tconfig', '', true, 0);
$fld_rgpd  = import('fld_rgpd', 'POST', true, '');
switch ($validForm) {
case NULL :
    $token      = uniqid(rand(), true);
    $token_time = time();
    setcookie(POST_COOKIE, $token.CONNECTOR.$token_time, time() + (30 * 60));
    break;
case 'send' :
    $tokens     = explode(CONNECTOR, $_COOKIE[POST_COOKIE]);
    $token_time = time() - (15 * 60);
	if (empty($tokens[0]) || $tokens[1] < time() - (30 * 60)) {
        echo BeginJavascript().'
var sto = "'.str_replace('<br />', '\n', stripslashes($web[681])).'";
alert(sto);
'.EndJavascript();
        $validForm = NULL;
        $token      = uniqid(rand(), true);
        $token_time = time();
        setcookie(POST_COOKIE, $token.CONNECTOR.$token_time, time() + (30 * 60));
    }
	elseif ($tokens[1] + 2 > time()) {
        echo BeginJavascript().'
var sto = "'.str_replace('<br />', '\n', stripslashes($web[682])).'";
alert(sto);
'.EndJavascript();
        $validForm = NULL;
        $token      = uniqid(rand(), true);
        $token_time = time();
        setcookie(POST_COOKIE, $token.CONNECTOR.$token_time, time() + (30 * 60));
    }
    break;
}
if (!empty($ctrl_spam)) $validForm = '';
// fin du dispositif de sécurité

///////////////////////////////////////////////////////////////////////////
// libellés du formulaire à COMPLETER ET ADAPTER
if ($lng == 'fr') {
    // ne pas supprimer les deux variables ci-dessous //
    $myform['CP'] = 'M\'envoyer une copie de ce formulaire : ';
    ////////////////////////////////////////////////////
	$fix = '&nbsp;(<span class="text-danger"> * </span>)';  
    $myform[0] = 'Merci de nous envoyer vos résultats.';
    $myform[1] = 'Vos Nom et Prénom';
    $myform[2] = 'Votre email';
    $myform[3] = 'Votre score';
    $myform[4] = $web[552].' '.$fix;
    $myform[5] = 'Résultats de';
    $myform[6] = 'EMail : ';
    $myform[7] = 'Score : ';
    $myform[8] = 'Equipement rendu';
    $myform[9] = 'Participation au prochain challenge ?';
    $myform[10] = 'Moyen de déplacement';
    $means      = array('Transport en commun', 'Personnel', 'Co-voiturage');
} else {
    // ne pas supprimer les deux variables ci-dessous //
    $myform['CP'] = 'Send me a copy of this form: ';
    ////////////////////////////////////////////////////
    
    $myform[0] = 'Please send us your results.';
    $myform[1] = 'Your Name and Surname';
    $myform[2] = 'Your email';
    $myform[3] = 'Your score';
    $myform[4] = $web[552].' '.$fix;
    $myform[5] = 'Résults of';
    $myform[6] = 'EMail : ';
    $myform[7] = 'Score : ';
    $myform[8] = 'Equipment rendered';
    $myform[9] = 'Participation in the next challenge?';
    $myform[10] = 'Means of travel';
    $means      = array('Public transport', 'Personal', 'Car-sharing');
}

// récupération des variables du formulaire
// ne pas supprimer les trois variables ci-dessous //
$fld_cp = import('fld_cp', 'POST', true, '');
$fld_ar = import('fld_ar', 'POST', true, '');
$fld_rgpd = import('fld_rgpd', 'POST', true, '');
////////////////////////////////////////////////////

$fld_1 = import('fld_1', 'POST');
$fld_2 = checkEmail(import('fld_2', 'POST')); // contrôle du courriel après récupération
$fld_3 = import('fld_3', 'POST');
// Appel editeur
require CHEMIN.'inc/ckeditor_config/editors_functions.php';
require_once CHEMIN.'inc/htmlpurifier/library/HTMLPurifier.auto.php';
$configpg = HTMLPurifier_Config::createDefault();
$configpg->set('HTML.Allowed', '
  p[class|id|style],div[class|id|style],strong,em,u,b,sub,sup,span[class|style],pre[class],blockquote[class|style],
  a[href|target|title|style],img[src|alt|style],ul[style],ol[start|style],li');
$configpg->set('Attr.AllowedFrameTargets', array('_blank', '_self'));
$purifier = new HTMLPurifier($configpg);
// Fin de appel editeur et control du champs commentaire

$fld_4     = import('fld_4', 'POST', FALSE);
$fld_4     = $purifier->purify(isAuthorImg($userprefs[1]) ? $fld_4 : getPGTXT($fld_4));
$fld_5 = import('fld_5', 'POST');
$fld_6 = import('fld_6', 'POST');
$fld_7 = import('fld_7', 'POST');

// traitement d'erreurs des champs obligatoires
$err_1 = empty($fld_1) && $validForm == 'send';
$err_2 = empty($fld_2) && $validForm == 'send';
$err_3 = empty($fld_3) && $validForm == 'send';
$err_4 = empty($fld_4) && $validForm == 'send';
$err_crypt = $isCaptcha && $serviz[100] != '0' && ($userprefs[1] == '' || $serviz[98] == '') && !$cryptok && $validForm == 'send' ? true : false;
$err_rgpd  = $isRGPD && empty($fld_rgpd) && !OK_RGPD_date($userprefs[1]) && $validForm == 'send' ? true : false;

$erreur .= $err_1     ? '<li>'.$web[545].$myform[1].$web[546].'</li>': '';
$erreur .= $err_2     ? '<li>'.$web[545].$myform[2].$web[546].'</li>': '';
$erreur .= $err_3     ? '<li>'.$web[545].$myform[3].$web[546].'</li>': '';
$erreur .= $err_crypt ? '<li>'.$web[529].'</li>': '';
$erreur .= $err_rgpd  ? '<li>'.$web[405].'</li>': '';
$erreur .= $err_4     ? '<li>'.$web[545].$myform[4].$web[43].'</li>': '';
// fin traitement d'erreurs

if ($validForm == 'send' && empty($erreur)) {
    // on a validé le formulaire
    // le code est valide
    // enregistrement de l'acceptation RGPD des membres connectés ==> NE PAS SUPPRIMER
    if (!empty($userprefs[1]) && $fld_rgpd == 'on') setRGPDdate();
    
    // construction du message à envoyer
        
    // EXEMPLE A SUPPRIMER APRES LE TEST
    $message .= '<div>'.$myform[5].' : '.$fld_1.'</div>';
    $message .= '<div>'.$myform[6].$fld_2.'</div>';
    $message .= '<div>'.$myform[7].$fld_3.'</div>';
    $message .= '<div>'.$myform[8].' : '.($fld_5 == 'on' ? $web[313] : $web[314]).'</div>';
    $message .= '<div>'.$myform[9].' : '.$fld_6.'</div>';
    $message .= '<div>'.$myform[10].' : '.$fld_7.'</div>';
    $message .= empty($fld_4) ? '' : '<div>'.$myform[4].' : </div><div style="margin:0 20px;">'.str_replace("\n", "<br />", $fld_4).'</div>';
    // fin exemple
 
    // confection partie texte
        $texte1  = strip_tags(preg_replace("!<br />|<br />|</p>!i", "\n", preg_replace("!<hr>|<hr />!i", "\n \n", $message)));

    // envoi de l'email
    // envoi du message au(x) destinataire(s)
	$eMsgHtml = $message;
	$actioncomplete = 'C'; // pour contact
	$efilesattaches = '';
	$eAR      = $fld_ar != '' ? $fld_2 : '';
    $eTo = $user[1] != '' ? $user[1] : $smtp[4];
	$eFrom    = $fld_2;	
	$eSubject = $subject;
	if ($fld_cp != '') $destinataireencopy = $fld_2.' ';
		else $destinataireencopy = '';
    if (!empty($subject) && !empty($message) && !empty($eTo)) {
		sendmail($eTo, $eFrom,$eSubject, $eMsgHtml, $efilesattaches, $actioncomplete, $destinataireencopy, $eAR, $fld_2, $form1='');
  
    }
}

// si vous voulez mettre une icône du répertoire img associée au titre
if ($myIcon)
    $topmess = '<img src="'.CHEMIN.'img/'.$myIcon.'" class="f-right img32x32 valignMiddle" alt="">'.$topmess;

///////////////////////////////////////////////////////////////////////////
// NE PAS SUPPRIMER NI DEPLACER
include CHEMIN.'inc/hpage.inc';
if (function_exists('htable1'))
    htable1($topmess, 'ART'.$tconfig, '100%');
else
    htable($topmess, '100%');

// contrôle des droits d'accès
if (!isAccessGranted($formgroup)) {
    echo '
<div class="text-center web342">'.$web[342];
    if ($members[19] != '0' && $members[19] != '3') {
        $href1 = CHEMIN.($site['URLR'] == 'on' ? $lng.'-'.$urlrw[3].'-0-'.$tconfig.$z2 : 'connect.php?lng='.$lng.'&tconfig='.$tconfig.$z2);
        $href2 = CHEMIN.($site['URLR'] == 'on' ? $lng.'-'.$urlrw[15].'-5-new-'.$tconfig.$z2 : $site['USR'].'.php?lng='.$lng.'&uuser=new&tconfig='.$tconfig.$z2);
        echo '
  <p class="text-center">
    '.SubmitButton($web[630], 'self.location.href=\''.$href1.'\'').
      (empty($userprefs[1]) ? '&nbsp;&nbsp;'.SubmitButton($web[160], 'self.location.href=\''.$href2.'\'') : '').'
  </p>';
    }
	echo '
</div>';
    btable();
    include CHEMIN."inc/bpage.inc";
    exit();
}

// on affiche les erreurs des champs obligatoires
if (!empty($erreur)) {
    echo displayErrorMsg($web[542], $erreur);
    $validForm = '';
}

if (empty($validForm)) {
    $fix = ' <span class="text-danger"> * </span>';
    $labelClass = 'w-45 text-right';
    $itemClass  = 'w-50 text-left';
    echo '
		<div class="mainct w-100 text-center">';
// on n'a pas encore validé le formulaire ou le code captcha est faux
    echo '
  <form name="cryptoForm" action="'.CHEMIN.'pages/'.$formName.'.php?lng='.$lng.'&amp;tconfig='.$tconfig.'" method="post">
    <input type="hidden" name="validForm" value="send" />
    <input type="hidden" name="lng" value="'.$lng.'" />';
	echo '
		<fieldset class="border rounded">
			<legend class="headContactW">&bull; '.$myform[0].'</legend>';
    echo '
		<div class="table-responsive-md">
        <div class="d-table w-100 m-auto text-left maxWidthContact">
          <div class="d-table-row">';
    // affichage entête du formulaire
	echo '
		<div class="text-center font-weight-bold">
		  <span class="d-none"><input type="text" name="code_pseudo" value="" /></span>
		</div>
				<p>('.$fix.') '.$web[543].'</p>';
    echo '</div>';
	echo '<div class="d-table-row">';
    // METTRE ICI LE CONTENU DE VOTRE FORMULAIRE EN SE BASABT SUR LES EXEMPLES
    // EXEMPLE A MODIFIER APRES LE TEST
    
    // saisie nom et prénom : champ texte simple
    echo '
    <div class="w-98 m-auto">
      <div class="d-inline-block '.$labelClass.'">'.$myform[1].$fix.' :</div>
      <div class="d-inline-block '.$itemClass.'">
        <input class="form-control '.($err_1 ? 'errorInputText' : 'texte').'" type="text" name="fld_1" value="'.$fld_1.'" style="max-width:300px;" />
      </div>';
    echo '</div>';
	echo '<div class="d-table-row">';
    // saisie adresse mail : champ texte simple
    echo '
      <div class="d-inline-block '.$labelClass.'">'.$myform[2].$fix.' :</div>
      <div class="d-inline-block '.$itemClass.'">
        <input class="form-control '.($err_2 ? 'errorInputText' : 'texte').'" type="text" name="fld_2" value="'.$fld_2.'" style="max-width:280px;" />
      </div>';
    
    // saisie du score : champ texte simple
	echo '</div>';
	echo '<div class="d-table-row">';
    echo '
      <div class="d-inline-block '.$labelClass.'">'.$myform[3].$fix.' :</div>
      <div class="d-inline-block '.$itemClass.'">
        <input class="form-control '.($err_3 ? 'errorInputText' : 'texte').'" type="text" name="fld_3" value="'.$fld_3.'" style="max-width:120px;" />
      </div>';
    
    // saisie équipement rendu : champ case à cocher
    echo '</div>';
	echo '<div class="d-table-row">';
    echo '
      <div class="d-inline-block py-2 '.$labelClass.'"><label for="fld_5">'.$myform[8].' :</label></div>
      <div class="d-inline-block py-2 '.$itemClass.'">
        <input type="checkbox" id="fld_5" name="fld_5"'.Checked($fld_5).' />
      </div>';
    
    // saisie prochain challenge : champ boutons radio
    echo '</div>';
	echo '<div class="d-table-row">';
    echo '
      <div class="d-inline-block py-2 '.$labelClass.'">'.$myform[9].' :</div>
      <div class="d-inline-block py-2 '.$itemClass.'">
        <input type="radio" id="fld_61" name="fld_6" value="'.$web[313].'"'.Checked($web[313] == $fld_6).' />
        <span'.($err_6 ? ' class="errorInputText"' : '').'> <label for="fld_61">'.$web[313].'</label></span> 
        <input type="radio" id="fld_62" name="fld_6" value="'.$web[314].'"'.Checked($web[314] == $fld_6).' />
        <span'.($err_6 ? ' class="errorInputText"' : '').'> <label for="fld_62">'.$web[314].'</label></span> 
      </div>';
    // saisie du score : champ sélection simple
    echo '</div>';
	echo '<div class="d-table-row">';
    echo '
      <div class="d-inline-block '.$labelClass.'">'.$myform[10].' :</div>
      <div class="d-inline-block '.$itemClass.'">
        <select class="form-control" style="max-width:240px;" name="fld_7">
          <option value="'.$means[0].'"'.Selected($fld_7 == $means[0]).'>'.$means[0].'</option>
          <option value="'.$means[1].'"'.Selected($fld_7 == $means[1]).'>'.$means[1].'</option>
          <option value="'.$means[2].'"'.Selected($fld_7 == $means[2]).'>'.$means[2].'</option>
        </select>
      </div>';
    
    // saisie de commentaires : champ texte libre 
    echo '</div>';
	echo '<div class="d-table-row">';
	echo '
	  <div class="text-center pt-5">'.$myform[4].' :</div>';
	$cke_toolbar = !isAuthorImg($userprefs[1]) ? array('toolbarName'=>'Guppy_out_min') : array('toolbarName'=>'Guppy_out_min_img');
	echo display_editor('fld_4', '100%', 280, $fld_4, $cke_toolbar);

    echo '
    </div>';
    // fin exemple
  	echo '<div class="d-table-row">';          
    // les deux lignes suivantes concernent la copie à l'envoyeur et l'accusé de réception
    // pour ne pas les utiliser les mettre simplement en commentaire
		echo '
		  <label class="form-check-label mr-4" for="fld_cp">'.$myform['CP'].'</label>
		  <input class="form-check-input mt-2" type="checkbox" id="fld_cp" name="fld_cp" />
		';
	echo '</div>';
  	echo '<div class="d-table-row">'; 
        echo '

			<label class="form-check-label mr-4" for="fld_ar">'.$web[544].'</label>
			<input class="form-check-input mt-2" type="checkbox" id="fld_ar" name="fld_ar" />
		';
	echo '</div>';
		echo '
		  </div>
        </div>
        </div>
    <div class="table-responsive-md">
        <div class="d-table w-100">';
        if (!empty($serviz[177]) && !OK_RGPD_date($userprefs[1])) 
			echo '
			  <div class="d-table-row">
				<div class="d-table-cell text-center">
					<fieldset class="w-95 m-auto text-left border rounded"><legend>'.$web[14].'</legend>
						<p><strong>'.$web[646].'</strong></p>
						<p>'.$web[684].'</p>
						<div class="form-check">
							<label for="fld_rgpd">'.$web[415].$fix.'&nbsp;:&nbsp;</label>
							<input type="checkbox" class="form-check-input ml-2 mt-2" id="fld_rgpd" name="fld_rgpd"'.Checked($fld_rgpd).' />
						</div>
					</fieldset>
				</div>
			</div>';
        if ($serviz[100] != '0' && $serviz[95] == 'on' && ($serviz[98] == '' || $userprefs[1] == '')) {
            $lbl = $serviz[100] == '3' ? $web[642] : '';
            echo '
          <div class="d-table-row">
            <div class="d-table-cell text-center mt-4 mx-auto">'.dsp_crypt(0, 1, 3, 2, $lbl, $serviz[115] == 'on' ? $web[643] : '').'</div>
          </div>
          <div class="d-table-row">
            <div class="d-table-cell text-center">
              '.($serviz[100] == '3' ? '' : $web[530]).'
              <input class="'.($err_crypt ? 'errorInputText' : 'texte').' inputcrypt m-auto form-control" 
                type="text" name="crypt" onpaste="return false;" />
            </div>
          </div>';
        }
        echo '
			<div class="d-table-row">
				<div class="d-table-cell text-center"><br />'.SubmitButton($web[52]).'
				</div>
			</div>
		</div>
        </div>
      </fieldset>
      </form>
    </div>
    </div>';
} elseif (!empty($message)) {
    // message faisant suite à la validation du formulaire
    echo '<div class="text-left"><br />'.$message.'</div>';
}

btable();
include CHEMIN."inc/bpage.inc";
?>