File "formulaire_signature.php"

Full path: /home/argothem/www/SpipFactory-fichiers_de_travail/sauvegarde-depannage-1.9a3.2/1.9/ecrire/balise/formulaire_signature.php
File size: 8.89 KB
MIME-type: text/x-php
Charset: utf-8

<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2006                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

if (!defined("_ECRIRE_INC_VERSION")) return;	#securite

//
// Formulaire de signature d'une petition
//

include_spip('base/abstract_sql');
spip_connect();

// Contexte necessaire lors de la compilation

// Il *faut* demander petition, meme si on ne s'en sert pas dans l'affichage,
// car on doit obtenir la jointure avec sql_petitions pour verifier si
// une petition est attachee a l'article

function balise_FORMULAIRE_SIGNATURE ($p) {
	return calculer_balise_dynamique($p,'FORMULAIRE_SIGNATURE', array('id_article', 'petition'));
}

// Verification des arguments (contexte + filtres)
function balise_FORMULAIRE_SIGNATURE_stat($args, $filtres) {

	// pas d'id_article => erreur de squelette
	if (!$args[0])
		return erreur_squelette(
			_T('zbug_champ_hors_motif',
				array ('champ' => '#FORMULAIRE_SIGNATURE',
					'motif' => 'ARTICLES')), '');

	// article sans petition => pas de balise
	else if (!$args[1])
		return '';

	else {
		// aller chercher dans la base la petition associee
		if ($r = spip_abstract_fetsel("texte, site_obli, message", 'spip_petitions', "id_article = ".intval($args[0]))) {
			$args[2] = $r['texte'];
			// le signataire doit-il donner un site ?
			$args[3] = ($r['site_obli'] == 'oui') ? '':' ';
			// le signataire peut-il proposer un commentaire
			$args[4] = ($r['message'] == 'oui') ? ' ':'';
		}
		return $args;
	}
}

// Executer la balise
function balise_FORMULAIRE_SIGNATURE_dyn($id_article, $petition, $texte, $site_obli, $message) {

	if (_request('var_confirm')) # _GET
		$reponse = reponse_confirmation();  # calculee plus tot: assembler.php

	else if (_request('nom_email') AND _request('adresse_email')) # _POST
		$reponse = reponse_signature($id_article,
			_request('nom_email'), _request('adresse_email'),
			_request('message'), _request('signature_nom_site'),
			_request('signature_url_site'), _request('url_page')
		);

	return array('formulaires/formulaire_signature', $GLOBALS['delais'],
	array(
		'id_article' => $id_article,
		'petition' => $petition,
		'texte' => $texte,
		'site_obli' => $site_obli,
		'message' => $message,
		'self' => $reponse ?'':parametre_url(self(),'debut_signatures','', '&'),
		'reponse' => $reponse
	));
}


// Retour a l'ecran du lien de confirmation d'une signature de petition.
// Si var_confirm est non vide, c'est l'appel dans public/assembler.php
// pour vider le cache au demarrage afin que la nouvelle signature apparaisse.
// Sinon, c'est l'execution du formulaire et on retourne le message 
// de confirmation ou d'erreur construit lors de l'appel par assembler.php

function reponse_confirmation($var_confirm = '') {

	static $confirm = '';
	if (!$var_confirm) return $confirm;

	if (spip_connect()) {
		include_spip('inc/texte');
		include_spip('inc/filtres');

		// Eviter les doublons
		$lock = "petition $var_confirm";
		if (!spip_get_lock($lock, 5)) {
			$confirm= _T('form_pet_probleme_technique');
		}
		else {
			$result_sign = spip_abstract_select('*', 'spip_signatures', "statut=" . spip_abstract_quote($var_confirm));

			if (spip_num_rows($result_sign) > 0) {
				while($row = spip_fetch_array($result_sign)) {
					$id_signature = $row['id_signature'];
					$id_article = $row['id_article'];
					$date_time = $row['date_time'];
					$nom_email = $row['nom_email'];
					$adresse_email = $row['ad_email'];
					$nom_site = $row['nom_site'];
					$url_site = $row['url_site'];
					$message = $row['message'];
					$statut = $row['statut'];
				}
				$result_petition = spip_abstract_select('*', 'spip_petitions', "id_article=$id_article");

	
				while ($row = spip_fetch_array($result_petition)) {
					$id_article = $row['id_article'];
					$email_unique = $row['email_unique'];
					$site_obli = $row['site_obli'];
					$site_unique = $row['site_unique'];
					$message_petition = $row['message'];
					$texte_petition = $row['texte'];
				}
	
				if ($email_unique == "oui") {
					$result = spip_abstract_select('ad_email', 'spip_signatures', "id_article=$id_article AND ad_email=" . spip_abstract_quote($adresse_email) . " AND statut='publie'");
					if (spip_num_rows($result) > 0) {
						$confirm= _T('form_pet_deja_signe');
						$refus = "oui";
					}
				}
	
				if ($site_unique == "oui") {
					$result = spip_abstract_select('statut', 'spip_signatures', "id_article=$id_article AND url_site=" . spip_abstract_quote($url_site) . " AND statut='publie'");
					if (spip_num_rows($result) > 0) {
						$confirm= _T('form_pet_deja_enregistre');
						$refus = "oui";
					}
				}
	
				if ($refus == "oui") {
					$confirm= _T('form_deja_inscrit');
				}
				else {
					spip_query("UPDATE spip_signatures SET statut='publie', date_time=NOW() WHERE id_signature='$id_signature'");

					// invalider les pages ayant des boucles signatures
					include_spip('inc/invalideur');
					include_spip('inc/meta');
					suivre_invalideur("id='varia/pet$id_article'");
	
					$confirm= _T('form_pet_signature_validee');
				}
			}
			else {
				$confirm= _T('form_pet_aucune_signature');
			}
			spip_release_lock($lock);
		}
	}
	else {
		$confirm= _T('form_pet_probleme_technique');
	}
}

//
// Retour a l'ecran de la signature d'une petition
//

function reponse_signature($id_article, $nom_email, $adresse_email, $message, $nom_site, $url_site, $url_page) {

	if (!spip_connect()) return _T('form_pet_probleme_technique');

	include_spip('inc/texte');
	include_spip('inc/filtres');
	include_spip('inc/mail');

	// Eviter les doublons
	$lock = "petition $id_article $adresse_email";
	if (!spip_get_lock($lock, 5)) return _T('form_pet_probleme_technique');

	$result_petition = spip_abstract_select('*', 'spip_petitions', "id_article=$id_article");

	while ($row = spip_fetch_array($result_petition)) {
		$id_article = $row['id_article'];
		$email_unique = $row['email_unique'];
		$site_obli = $row['site_obli'];
		$site_unique = $row['site_unique'];
		$message_petition = $row['message'];
		$texte_petition = $row['texte'];
	}
	$texte = '';
	if (strlen($nom_email) < 2)
		$texte = _T('form_indiquer_nom');
	elseif ($adresse_email == _T('info_mail_fournisseur'))
		$texte = _T('form_indiquer_email');
	elseif (!email_valide($adresse_email)) 
		$texte = _T('form_email_non_valide');
	else {
		if ($email_unique == "oui") {
			$result = spip_abstract_select('statut', 'spip_signatures', "id_article=$id_article AND ad_email=" . spip_abstract_quote($adresse_email) . " AND statut='publie'");
			if (spip_num_rows($result) > 0) 
				$texte = _T('form_pet_deja_signe');
		}
		if (!$texte AND $site_obli == "oui") {
			if (!$nom_site) {
				$texte = _T('form_indiquer_nom_site');
			}
		}
		include_spip('inc/sites');
		if (!$texte AND !recuperer_page($url_site)) {
			$texte = _T('form_pet_url_invalide');
		}
		if (!$texte AND $site_unique == "oui") {
			$result = spip_abstract_select('statut', 'spip_signatures', "id_article=$id_article AND url_site=" . spip_abstract_quote($url_site) . " AND (statut='publie' OR statut='poubelle')");
			if (spip_num_rows($result) > 0) {
				$texte = _T('form_pet_site_deja_enregistre');
			}
		}
		$passw = test_pass();
		/* impossible a present
		if ($refus == "oui") return _T('form_pet_signature_pasprise');
		*/
		$url = parametre_url($url_page,	'var_confirm',$passw,'&') ."#sp$id_article";
		$row = spip_fetch_array(spip_abstract_select('titre', 'spip_articles', "id_article=$id_article"));
		$titre = $row['titre'];
		$messagex = _T('form_pet_mail_confirmation', array('titre' => $titre, 'nom_email' => $nom_email, 'nom_site' => $nom_site, 'url_site' => $url_site, 'url' => $url, 'message' => $message));

		if (envoyer_mail($adresse_email, _T('form_pet_confirmation')." ".$titre, $messagex)) {
			spip_abstract_insert('spip_signatures', "(id_article, date_time, nom_email, ad_email, nom_site, url_site, message, statut)", "($id_article, NOW(), " . spip_abstract_quote($nom_email) . ", " . spip_abstract_quote($adresse_email) . ", " . spip_abstract_quote($nom_site) . ", " . spip_abstract_quote($url_site) . ", " . spip_abstract_quote($message) . ", '$passw')");
			$texte = _T('form_pet_envoi_mail_confirmation');
		}
		else {
			$texte = _T('form_pet_probleme_technique');
		}
	}
	spip_release_lock($lock);
	return $texte;
}


function test_pass() {
	include_spip('inc/acces');
	for (;;) {
		$passw = creer_pass_aleatoire();
		if (!spip_num_rows(spip_abstract_select('statut', 'spip_signatures', "statut='$passw'")))
			return $passw;
	}

}
?>