Example #1
0
function spiplistes_formulaire_abonnement (
											$type
											, $acces_membres
											, $formulaire
											, $nom_site_spip
											, $inscription_redacteur
											, $inscription_visiteur
											) {
	
	$mail_inscription_ = trim(strtolower(_request('mail_inscription_')));
	$nom_inscription_ = trim(_request('nom_inscription_'));
	$type_abo = _request('suppl_abo') ;
	$listes_demande = _request('list');
	$desabo = ($type_abo == 'non') ? 'oui' : 'non';
	
	$adresse_site = $GLOBALS['meta']['adresse_site'];

	$reponse_formulaire = '';
	$email_a_envoyer = $mode_modifier = $sql_where = false;
	$abonne = array();
	
	// traiter d'abord si retour de mail lien cookie
	$d = _request('d');
	if(!empty($d)) {
		$sql_where = array(
				'cookie_oubli='.sql_quote($d)
				, 'statut<>'.sql_quote('5poubelle')
				, 'pass<>'.sql_quote('')
			);
	}
	// ou si identifie'
	else if($connect_id_auteur = intval($GLOBALS['auteur_session']['id_auteur']))
	{
		$sql_where = array("id_auteur=$connect_id_auteur");
	}
	if($sql_where) {
		// cherche les coordonnees de l'abonne'
		$sql_select = 'id_auteur,statut,nom,email,cookie_oubli';
		$sql_result = sql_select(
			$sql_select
			, 'spip_auteurs'
			, $sql_where
			, '', '', 1
		);
		if($row = sql_fetch($sql_result)) {
			foreach(explode(',', $sql_select) as $key) {
				$abonne[$key] = $row[$key];
			}
		}
		$abonne['format'] = spiplistes_format_abo_demande($abonne['id_auteur']);
		
	}
	
	// si identifie' par cookie ou login... effectuer les modifications demandees
	if(count($abonne)) {
		
		
		// toujours rester en mode modif pour permettre la correction
		$mode_modifier = 'oui';
		
		if($desabo == 'oui')
		{
			spiplistes_format_abo_modifier($abonne['id_auteur']);
			$reponse_formulaire = _T('spiplistes:vous_etes_desabonne');
			$email_a_envoyer = true;
		}
		
		else if($listes_demande)
		{
			//spiplistes_debug_log("demande modification abonnements listes " . implode(",", $listes_demande));
			
			if(is_array($listes_demande) && count($listes_demande))
			{
				$listes_ajoutees = spiplistes_abonnements_ajouter($abonne['id_auteur']
															, array_map('intval', $listes_demande)
															);
				$curr_abos_auteur = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);
				
				foreach($curr_abos_auteur as $id_liste) {
					if(!in_array($id_liste, $listes_demande)) {
						spiplistes_abonnements_auteur_desabonner($abonne['id_auteur']
																 , $id_liste
																 );
					}
				}
			}
			
			// modifier le format de reception ?
			if(spiplistes_format_valide($type_abo) && ($type_abo != $abonne['format']))
			{
				spiplistes_format_abo_modifier($abonne['id_auteur'], $abonne['format'] = $type_abo);
				//$abonne['ids_abos'] = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);
				
			}
			
			$reponse_formulaire = _T('spiplistes:demande_enregistree_retour_mail');
			$email_a_envoyer = true;
		}
		else
		{
			//spiplistes_debug_log('pas de demande, afficher formulaire de modif au complet');
			$reponse_formulaire = ''
				. '<span class="nom">' . $abonne['nom'] . "</span>\n"
				. '<span class="souhait">' . _T('spiplistes:effectuez_modif_validez', array('s'=>$abonne['nom'])). "</span>\n"
				;
		}
		
		$id_abonne = $abonne['id_auteur'];
		$objet_email = _T('spiplistes:votre_abo_listes');
		$contexte = array('titre' => $objet_email);
		
	}
	else // non identifie' ? gestion par cookie_oubli.
	{
		$texte_intro = _T('form_forum_message_auto') . '<br /><br />'._T('spiplistes:bonjour') . "<br />\n";
		
		$abonne = array('email' => email_valide($mail_inscription_));
		
		if($abonne['email'])
		{
			// si l'abonne existe deja mais pas d'action demandee,
			// affiche formulaire complet
			//if($row = sql_fetch(
			if ($row = 
				spiplistes_auteurs_auteur_select ('id_auteur,login,nom,statut,lang', 'email='.sql_quote($abonne['email']))
				
			) {
				
				$abonne['id_auteur'] = intval($row['id_auteur']);
				$abonne['statut'] = $row['statut'];
				$abonne['login'] = $row['login'];
				$abonne['nom'] = $row['nom'];
				$abonne['lang'] = $row['lang'];
				$abonne['format'] =
					($f = spiplistes_format_abo_demande($abonne['id_auteur']))
					? $f
					: 'texte'
					;
	
				if($abonne['statut'] == '5poubelle')
				{
					$reponse_formulaire = _T('form_forum_access_refuse');
				}
				// si encore nouveau, c'est qu'il ne s'est jamais identifie'
				else if($abonne['statut'] == 'nouveau')
				{
					// le supprimer. Il sera re-cree plus loin
					spiplistes_auteurs_auteur_delete('id_auteur='.sql_quote($abonne['id_auteur']));
					$abonne['id_auteur'] = false;
				}
				else {
					// demande de modifier l'abonnement ? envoie le cookie de relance par mail
					spiplistes_auteurs_cookie_oubli_updateq($abonne['cookie_oubli'] = creer_uniqid(), $abonne['email']);
					
					$objet_email = _T('spiplistes:abonnement_titre_mail');
					$texte_email = spiplistes_texte_inventaire_abos($abonne['id_auteur'], $type_abo, $nom_site_spip);
					
					
					$contexte = array('titre' => $objet_email);
					$id_abonne = $abonne['id_auteur'];
				}
				
			}
			// l'adresse mail n'existe pas dans la base.
			else 
			{
				
				$abonne['login'] = spiplistes_login_from_email($abonne['email']);
				$abonne['nom'] =
					(($acces_membres == 'non') || empty($nom_inscription_))
					? ucfirst($abonne['login'])
					: $nom_inscription_
					;
				
				// ajouter l'abonne
				$pass = creer_pass_aleatoire(8, $abonne['email']);
				$abonne['zepass'] = $pass;
				$abonne['mdpass'] = md5($pass);
				$abonne['htpass'] = generer_htpass($pass);
				
				$abonne['cookie_oubli'] = creer_uniqid();
				
				$abonne['statut'] = ($inscription_redacteur == 'oui') ? 'nouveau' : '6forum';
	
				// format d'envoi par defaut pour le premier envoi de confirmation
				$abonne['format'] = 'texte'; 
				
				// creation du compte ...
				if($id_abonne = spiplistes_auteurs_auteur_insertq(
						array(
							'nom' => $abonne['nom']
							, 'email' => $abonne['email']
							, 'login' => $abonne['login']
							, 'pass' => $abonne['mdpass']
							, 'statut' => $abonne['statut']
							, 'htpass' => $abonne['htpass']
							, 'cookie_oubli' => $abonne['cookie_oubli']
							)
					)) {
					// creation .htpasswd & LDAP si besoin systeme
					ecrire_acces();
					
					// premier format de reception par defaut
					spiplistes_format_abo_modifier($id_abonne, $abonne['format']);
				}

				$objet_email = _T('spiplistes:confirmation_inscription');
				
				$contexte = array(
								'titre' => $objet_email
								, 'nouvel_inscription' => 'oui'
								, 'inscription_redacteur' => $inscription_redacteur
								, 'inscription_visiteur' => $inscription_visiteur
							);
			}
			
			$email_a_envoyer = true;
			
		}
		else if(!empty($mail_inscription_)) {
			//Non email o non valida
			return(array(true, _T('spiplistes:erreur_adresse'), $mode_modifier, false));
		}
	}
	if($id_abonne && $email_a_envoyer) {
		
		$abonne['ids_abos'] = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);

		$abonne['format'] = spiplistes_format_valide($abonne['format']);
		
		$email_a_envoyer = spiplistes_preparer_message(
					($objet_email = "[$nom_site_spip] " . $objet_email)
					, spiplistes_patron_message()
					, array_merge($contexte, $abonne)
					);
		if(
			spiplistes_envoyer_mail(
				$abonne['email']
				, $objet_email
				, $email_a_envoyer
				, false
				, ''
				, $abonne['format']
			)
		) {
			$reponse_formulaire =
				($acces_membres == 'oui')
				? _T('form_forum_identifiant_mail')
				: _T('spiplistes:demande_enregistree_retour_mail')
				;
		}
		else {
			$reponse_formulaire = _T('form_forum_probleme_mail');
		}
	} 

	return(array(true, $reponse_formulaire, $mode_modifier, $abonne));
} // end spiplistes_formulaire_abonnement()
Example #2
0
function formulaires_spip_listes_inscription_traiter_dist ($id_liste='') {
	
	// enregistre dans spip_auteurs, spip_auteurs_elargis, spip_auteurs_listes			
			
	$val['email'] = _request('email');
	$val['nom'] = _request('email');
	$alea_actuel = creer_uniqid();
	$alea_futur = creer_uniqid();
	$val['alea_actuel'] = $alea_actuel;
	$val['alea_futur'] = $alea_futur;
	$val['low_sec'] = '';
	$val['statut'] = 'aconfirmer';
	
	$format = _request('format_abo');
	$listes = _request('listes');

	// si l'auteur existe deja, 
	$auteur = spiplistes_auteurs_auteur_select('id_auteur,statut,lang'
											   , 'email='.sql_quote($val['email']));
	if ($auteur)
	{
		$id_auteur = $auteur['id_auteur'];
		// reactiver le compte si necessaire
		if ($auteur['statut'] == '5poubelle')
		{
			spiplistes_auteurs_auteur_statut_modifier ($id_auteur, 'aconfirmer');
		}
		spiplistes_debug_log ('inscription auteur #'.$id_auteur.' email:'.$val['email']);
	}
	else
	{
		// creer le compte abonne'
		if ($id_auteur = spiplistes_auteurs_auteur_insertq ($val))
		{
			sql_insertq(
					'spip_auteurs_elargis'
				  , array('id_auteur'=>$id_auteur
						 ,'spip_listes_format'=>$format
						 )
				  );
		}
		spiplistes_debug_log ('NEW inscription email:'.$val['email']);
		$lang = $GLOBALS['meta']['langue_site'];
	}
	
	if ($listes) {
		foreach($listes as $liste) {
			sql_insertq ('spip_auteurs_listes'
					, array('id_auteur'=>$id_auteur
							,'id_liste'=>$liste
							)
					);
		}
	}
	
	// envoyer mail de confirmation
	if (
		spiplistes_envoyer_mail (
			$val['email']
			, _T('spiplistes:confirmation_inscription')
			, _T('spiplistes:inscription_reponses_s'
				 , array('s' => spiplistes_nom_site_texte ($lang))
				 )
	   )
	) {
		$contexte = array('message_ok'=>_T('spiplistes:demande_ok'),'editable' => false,);
	}
	else {
		$contexte = array('message_ok'=>_T('spiplistes:demande_ko'),'editable' => false,);
	}
	
	return ($contexte);
}