function formulaires_editer_profil_traiter_dist($id_auteur, $retour = '')
{
    $res = array();
    $res['nom'] = _request('nom');
    $res['prenom'] = _request('prenom');
    $res['activite'] = _request('activite');
    $res['email'] = _request('email');
    $pass = _request('new_pass');
    $pass2 = _request('new_pass2');
    if ($pass) {
        if ($pass == $pass2) {
            include_spip('inc/acces');
            $htpass = generer_htpass($pass);
            $alea_actuel = creer_uniqid();
            $alea_futur = creer_uniqid();
            $new_pass = md5($alea_actuel . $pass);
            $res['pass'] = $new_pass;
            $res['htpass'] = $htpass;
            $res['alea_actuel'] = $alea_actuel;
            $res['alea_futur'] = $alea_futur;
            $res['low_sec'] = '';
        }
    }
    if ($id_auteur = intval($id_auteur)) {
        sql_updateq('spip_auteurs', $res, "id_auteur={$id_auteur}");
        $res['message_ok'] = _T('fraap_candidatures:form_profil_modifie');
    } else {
        $res['message_erreur'] = _T('fraap_candidatures:form_probleme');
    }
    return $res;
}
Beispiel #2
0
function formulaires_register_traiter_dist()
{
    $login = _request('login');
    $name = _request('name');
    $password = _request('password');
    $re_password = _request('re_password');
    $email = _request('email');
    include_spip('inc/acces');
    include_spip('auth/sha256.inc');
    $alea_actuel = creer_uniqid();
    $alea_futur = creer_uniqid();
    $pass = _nano_sha256($alea_actuel . $password);
    $sql = 'Insert into spip_auteurs (nom,email,login,pass,htpass,statut,alea_actuel,alea_futur)values("' . $name . '","' . $email . '","' . $login . '","' . $pass . '","' . generer_htpass($password) . '","6forum","' . $alea_actuel . '","' . $alea_futur . '")';
    sql_query($sql);
    $id_user = mysql_insert_id();
    ppr('Новый пользователь с номером : ' . $id_user);
}
Beispiel #3
0
/**
 * Modifier le mot de passe de l'auteur sur le serveur concerne
 * en s'occupant du hash et companie
 * @param string $login
 * @param string $new_pass
 * @param int $id_auteur
 * @param string $serveur
 * @return bool
 */
function auth_spip_modifier_pass($login, $new_pass, $id_auteur, $serveur = '')
{
    if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
        return false;
    }
    if (!($id_auteur = intval($id_auteur)) or !sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)) {
        return false;
    }
    $c = array();
    include_spip('inc/acces');
    include_spip('auth/sha256.inc');
    $htpass = generer_htpass($new_pass);
    $alea_actuel = creer_uniqid();
    $alea_futur = creer_uniqid();
    $pass = _nano_sha256($alea_actuel . $new_pass);
    $c['pass'] = $pass;
    $c['htpass'] = $htpass;
    $c['alea_actuel'] = $alea_actuel;
    $c['alea_futur'] = $alea_futur;
    $c['low_sec'] = '';
    include_spip('action/editer_auteur');
    auteur_modifier($id_auteur, $c, true);
    // manque la gestion de $serveur
    return true;
    // on a bien modifie le pass
}
function install_etape_3b_dist()
{
    $login = _request('login');
    $email = _request('email');
    $nom = _request('nom');
    $pass = _request('pass');
    $pass_verif = _request('pass_verif');
    $server_db = defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB : _request('server_db');
    if (!defined('_PASS_LONGUEUR_MINI')) {
        define('_PASS_LONGUEUR_MINI', 6);
    }
    if (!defined('_LOGIN_TROP_COURT')) {
        define('_LOGIN_TROP_COURT', 4);
    }
    if ($login) {
        $echec = $pass != $pass_verif ? _T('info_passes_identiques') : (strlen($pass) < _PASS_LONGUEUR_MINI ? _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)) : (strlen($login) < _LOGIN_TROP_COURT ? _T('info_login_trop_court') : ''));
        include_spip('inc/filtres');
        if (!$echec and $email and !email_valide($email)) {
            $echec = _T('form_email_non_valide');
        }
        if ($echec) {
            echo minipres('AUTO', info_progression_etape(3, 'etape_', 'install/', true) . "<div class='error'><h3>{$echec}</h3>\n" . "<p>" . _T('avis_connexion_echec_2') . "</p>" . "</div>");
            exit;
        }
    }
    if (@file_exists(_FILE_CHMOD_TMP)) {
        include _FILE_CHMOD_TMP;
    } else {
        redirige_url_ecrire('install');
    }
    if (!@file_exists(_FILE_CONNECT_TMP)) {
        redirige_url_ecrire('install');
    }
    # maintenant on connait le vrai charset du site s'il est deja configure
    # sinon par defaut lire_meta reglera _DEFAULT_CHARSET
    # (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET)
    lire_metas();
    if ($login) {
        include_spip('inc/charsets');
        $nom = importer_charset($nom, _DEFAULT_CHARSET);
        $login = importer_charset($login, _DEFAULT_CHARSET);
        $email = importer_charset($email, _DEFAULT_CHARSET);
        # pour le passwd, bizarrement il faut le convertir comme s'il avait
        # ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
        $pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
        include_spip('auth/sha256.inc');
        include_spip('inc/acces');
        $htpass = generer_htpass($pass);
        $alea_actuel = creer_uniqid();
        $alea_futur = creer_uniqid();
        $shapass = _nano_sha256($alea_actuel . $pass);
        // prelablement, creer le champ webmestre si il n'existe pas (install neuve
        // sur une vieille base
        $t = sql_showtable("spip_auteurs", true);
        if (!isset($t['field']['webmestre'])) {
            @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3)  DEFAULT 'non' NOT NULL");
        }
        $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "login="******"nom" => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'htpass' => $htpass, 'statut' => '0minirezo'), "id_auteur={$id_auteur}");
        } else {
            $id_auteur = sql_insertq('spip_auteurs', array('nom' => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'htpass' => $htpass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'statut' => '0minirezo'));
        }
        // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne
        @sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur={$id_auteur}");
        // inserer email comme email webmaster principal
        // (sauf s'il est vide: cas de la re-installation)
        if ($email) {
            ecrire_meta('email_webmaster', $email);
        }
        // Connecter directement celui qui vient de (re)donner son login
        // mais sans cookie d'admin ni connexion longue
        include_spip('inc/auth');
        if (!($auteur = auth_identifier_login($login, $pass)) or !auth_loger($auteur, true)) {
            spip_log("login automatique impossible {$auth_spip} {$session}" . count($row));
        }
    }
    // installer les metas
    $config = charger_fonction('config', 'inc');
    $config();
    // activer les plugins
    // leur installation ne peut pas se faire sur le meme hit, il faudra donc
    // poursuivre au hit suivant
    include_spip('inc/plugin');
    actualise_plugins_actifs();
    include_spip('inc/distant');
    redirige_par_entete(parametre_url(self(), 'etape', '4', '&'));
}
Beispiel #5
0
function maj_v009_dist($version_installee, $version_cible)
{
    if (upgrade_vers(0.98, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_articles ADD maj TIMESTAMP");
        spip_query("ALTER TABLE spip_articles ADD export VARCHAR(10) DEFAULT 'oui'");
        spip_query("ALTER TABLE spip_articles ADD images TEXT DEFAULT ''");
        spip_query("ALTER TABLE spip_articles ADD date_redac datetime DEFAULT '0000-00-00 00:00:00' NOT NULL");
        spip_query("ALTER TABLE spip_articles DROP INDEX id_article");
        spip_query("ALTER TABLE spip_articles ADD INDEX id_rubrique (id_rubrique)");
        spip_query("ALTER TABLE spip_articles ADD visites INTEGER DEFAULT '0' NOT NULL");
        spip_query("ALTER TABLE spip_articles ADD referers BLOB NOT NULL");
        spip_query("ALTER TABLE spip_auteurs ADD maj TIMESTAMP");
        spip_query("ALTER TABLE spip_auteurs ADD pgp BLOB NOT NULL");
        spip_query("ALTER TABLE spip_auteurs_articles ADD INDEX id_auteur (id_auteur), ADD INDEX id_article (id_article)");
        spip_query("ALTER TABLE spip_rubriques ADD maj TIMESTAMP");
        spip_query("ALTER TABLE spip_rubriques ADD export VARCHAR(10) DEFAULT 'oui', ADD id_import BIGINT DEFAULT '0'");
        spip_query("ALTER TABLE spip_breves ADD maj TIMESTAMP");
        spip_query("ALTER TABLE spip_breves DROP INDEX id_breve");
        spip_query("ALTER TABLE spip_breves DROP INDEX id_breve_2");
        spip_query("ALTER TABLE spip_breves ADD INDEX id_rubrique (id_rubrique)");
        spip_query("ALTER TABLE spip_forum ADD ip VARCHAR(16)");
        spip_query("ALTER TABLE spip_forum ADD maj TIMESTAMP");
        spip_query("ALTER TABLE spip_forum DROP INDEX id_forum");
        spip_query("ALTER TABLE spip_forum ADD INDEX id_parent (id_parent), ADD INDEX id_rubrique (id_rubrique), ADD INDEX id_article(id_article), ADD INDEX id_breve(id_breve)");
        maj_version(0.98);
    }
    if (upgrade_vers(0.99, $version_installee, $version_cible)) {
        $result = spip_query("SELECT DISTINCT id_article FROM spip_forum WHERE id_article!=0 AND id_parent=0");
        while ($row = sql_fetch($result)) {
            unset($forums_article);
            $id_article = $row['id_article'];
            $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_article={$id_article}");
            for (;;) {
                unset($forums);
                while ($row2 = sql_fetch($result2)) {
                    $forums[] = $row2['id_forum'];
                }
                if (!$forums) {
                    break;
                }
                $forums = join(',', $forums);
                $forums_article[] = $forums;
                $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent IN ({$forums})");
            }
            $forums_article = join(',', $forums_article);
            spip_query("UPDATE spip_forum SET id_article={$id_article} WHERE id_forum IN ({$forums_article})");
        }
        $result = spip_query("SELECT DISTINCT id_breve FROM spip_forum WHERE id_breve!=0 AND id_parent=0");
        while ($row = sql_fetch($result)) {
            unset($forums_breve);
            $id_breve = $row['id_breve'];
            $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_breve={$id_breve}");
            for (;;) {
                unset($forums);
                while ($row2 = sql_fetch($result2)) {
                    $forums[] = $row2['id_forum'];
                }
                if (!$forums) {
                    break;
                }
                $forums = join(',', $forums);
                $forums_breve[] = $forums;
                $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent IN ({$forums})");
            }
            $forums_breve = join(',', $forums_breve);
            spip_query("UPDATE spip_forum SET id_breve={$id_breve} WHERE id_forum IN ({$forums_breve})");
        }
        $result = spip_query("SELECT DISTINCT id_rubrique FROM spip_forum WHERE id_rubrique!=0 AND id_parent=0");
        while ($row = sql_fetch($result)) {
            unset($forums_rubrique);
            $id_rubrique = $row['id_rubrique'];
            $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_rubrique={$id_rubrique}");
            for (;;) {
                unset($forums);
                while ($row2 = sql_fetch($result2)) {
                    $forums[] = $row2['id_forum'];
                }
                if (!$forums) {
                    break;
                }
                $forums = join(',', $forums);
                $forums_rubrique[] = $forums;
                $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent IN ({$forums})");
            }
            $forums_rubrique = join(',', $forums_rubrique);
            spip_query("UPDATE spip_forum SET id_rubrique={$id_rubrique} WHERE id_forum IN ({$forums_rubrique})");
        }
        maj_version(0.99);
    }
    if (upgrade_vers(0.997, $version_installee, $version_cible)) {
        spip_query("DROP TABLE spip_index");
        maj_version(0.997);
    }
    if (upgrade_vers(0.999, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_auteurs CHANGE pass pass tinyblob NOT NULL");
        spip_query("ALTER TABLE spip_auteurs ADD htpass tinyblob NOT NULL");
        $result = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE pass!=''");
        while ($r = sql_fetch($result)) {
            $htpass = generer_htpass($r['pass']);
            $pass = md5($pass);
            spip_query("UPDATE spip_auteurs SET pass='******', htpass='******' WHERE id_auteur=" . $r['id_auteur']);
        }
        maj_version(0.999);
    }
}
Beispiel #6
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()
Beispiel #7
0
function spiplistes_import(
	$filename
	, $realname
	, $abos_liste
	, $format_abo = 'non'
	, $separateur = "\t"
	, $flag_admin
	, $listes_autorisees
	, $forcer_abo = false
) {
	$result_affiche = '';
	
	if(is_readable($filename))
	{
		// abonner les adresses importees
		// aux listes...
		if(!is_array($abos_liste))
		{
			if(($ii = intval($abos_liste)) <= 0)
			{
				return(false);
			}
			$abos_liste = array($ii);
		}
		else
		{
			$abos_liste = array_map('intval', $abos_liste);
		}
		
		// recupere les logins et mails existants dans la base
		// pour eviter les doublons
		
		$current_entries = array();
		$sql_result = sql_select(array('id_auteur', 'login', 'email', 'nom'), 'spip_auteurs');
		
		while($row = spip_fetch_array($sql_result))
		{
			// ne prendre que les comptes qui ont un email
			if($m = $row['email']) {
				$m = strtolower($m);
				$current_entries[$m] = array('login' => strtolower($row['login'])
										   , 'id_auteur' => $row['id_auteur']
										   , 'nom' => $row['nom']
										   );
			}
		}
		//syslog(LOG_NOTICE, 'memory_get_usage[2]: ' . memory_get_usage());
		
		//
		spiplistes_log('import fichier '.$filename);
		$new_entries = file($filename);
		
		//syslog(LOG_NOTICE, 'memory_get_usage[3]: ' . memory_get_usage());
		
		$nb_new_entries = count($new_entries);
		
		$bad_dupli = $bad_email = 0;
		$statuts_auteurs = array('6forum', '1comite', '0minirezo');
		
		// charger la table des abonnements en ram afin d'eviter les petites requettes
		$abonnements = array();
		if(($sql_result = sql_select('id_auteur,id_liste'
									, 'spip_auteurs_listes')
			) !== false)
		{
			while($row = sql_fetch($sql_result)) {
				if(!isset($abonnements[$row['id_liste']])) {
					$abonnements[$row['id_liste']] = array();
				}
				$abonnements[$row['id_liste']][] = $row['id_auteur'];
			}
		}
		else {
			spiplistes_sqlerror_log('module import (abonnements)');
		}
		
		if($forcer_abo)
		{
			$auteurs_format = array();
			// charger la table des formats afin d'eviter les petites requettes
			if(($sql_result = sql_select("id_auteur,`spip_listes_format` AS format"
										, 'spip_auteurs_elargis')) !== false)
			{
				while($row = sql_fetch($sql_result)) {
					$auteurs_format[$row['id_auteur']] = $row['format'];
				}
			}
			else
			{
				spiplistes_sqlerror_log("module import (format)");
			}
		}
		
		// les formats
		$modifier_format = array();
		
		$err_import = _T('spiplistes:erreur_import_base');
		
		//syslog(LOG_NOTICE, 'memory_get_usage[2]: ' . memory_get_usage());
		//syslog(LOG_NOTICE, 'memory_get_peak_usage[2]: ' . memory_get_peak_usage());
		
		$start_time = microtime(1);
		
		$stack_new_auteurs = array();
		
		// statut temporaire
		$tmp_statut = '6abo'.date('YmdGis');
		
		for($jj = 0; $jj < $nb_new_entries; $jj++)
		{
			$nouvelle_entree = trim($new_entries[$jj]);
			
			if(!empty($nouvelle_entree)
			   // ni une ligne de commentaire
			   && !ereg("^[/#]", $nouvelle_entree))
			{
				list($email, $login, $nom) = explode($separateur, $nouvelle_entree);
				
				$email = strtolower(trim($email));
				
				$mail_exist = false;
				
				if(($email = email_valide($email))
				   &&	(
						!($mail_exist = array_key_exists($email, $current_entries))
						|| $forcer_abo
						)
				)
				{
					if(!$mail_exist)
					{
						// si le compte n'existe pas, le creer
						
						// commencer par calculer le login
						$login = trim($login);
						if(empty($login))
						{
							$login = spiplistes_login_from_email($email);
						}
						else
						{
							$login = strtolower($login);
						}
						// puis le nom
						$nom = trim($nom);
						if(empty($nom))
						{
							$nom = ucfirst($login);
						}
						
						// ajoute l'invite' dans la table des auteurs
						$pass = creer_pass_aleatoire(8, $email);
					
						// nouvel abo dans la pile des "a creer"
						$stack_new_auteurs[] = array(
							'nom' => $nom
							, 'email' => $email
							, 'login' => $login
							, 'pass' => md5($pass)
							, 'statut' => $tmp_statut
							, 'htpass' => generer_htpass($pass)
						);
					} // end if(!$mail_exist)
					
					// adresse mail existe dans la base
					// si on passe par ici, c'est sous-entendu $forcer_abo (abonne' un compte existant)
					else
					{
						$id_auteur = intval($current_entries[$email]['id_auteur']);
						
						// forcer le format dans la foulee
						if(!isset($auteurs_format[$id_auteur]))
						{
							$modifier_format[] = '(' . sql_quote($id_auteur) . ',' . sql_quote($format_abo) . ')';
						}
					}
					// est-ce vraiment utile (voir plus bas)
				}
				else
				{
					if($mail_exist) {
						$bad_dupli++;
						spiplistes_log('import dupli: '.$mail);
					}
					else {
						$bad_email++;
						spiplistes_log('import bad: '.$mail);
					}
				}
			}
		} // end for($jj = 0; $jj < $nb_new_entries; $jj++)
				
		// importer les nouveaux abonnés
		if(count($stack_new_auteurs))
		{
			$sql_col_names = '('.implode(',', array_keys($stack_new_auteurs[0])).')';
			$sql_col_values = '';
			
			//syslog(LOG_NOTICE, 'memory_get_usage[5]: ' . memory_get_usage());
			
			foreach($stack_new_auteurs as $auteur)
			{
				$values = array_map('sql_quote', $auteur);
				$sql_col_values .= '('.implode(',', $values).'),';
			}
			$sql_col_values = rtrim($sql_col_values,',');
			
			$r = sql_insert('spip_auteurs', $sql_col_names, $sql_col_values);
			
			spiplistes_debug_log ('size of imported values: ' . strlen($sql_col_values));
			
			//syslog(LOG_NOTICE, 'memory_get_usage[6]: ' . memory_get_usage());
			
			// nouveaux abonnements
			foreach($abos_liste as $id_liste)
			{
				// un INSERT sans VALUES
				// @todo: vérifier compatibilite sqlite et pg
				if(sql_query(
					'INSERT INTO spip_auteurs_listes
								(id_auteur,id_liste) SELECT a.id_auteur,'.$id_liste
									.' FROM spip_auteurs AS a WHERE a.statut='.sql_quote($tmp_statut))
				   === false
				)
				{
					spiplistes_sqlerror_log('import nouveaux abos dans spip_auteurs_listes');
				}
			}
			
			// format pour les nouveaux auteurs
				// un INSERT sans VALUES
				// @todo: vérifier compatibilite sqlite et pg
			if(sql_query(
				'INSERT INTO spip_auteurs_elargis
						(id_auteur,`spip_listes_format`) SELECT a.id_auteur,'.sql_quote($format_abo)
								.' FROM spip_auteurs AS a WHERE a.statut='.sql_quote($tmp_statut))
			   === false
			)
			{
				spiplistes_sqlerror_log('import nouveauxformats dans spip_auteurs_elargis');
			}
		
		}
		
		// Comptes deja existants, inclus dans le fichier import
		// - changer son format de réception ?
		// - l'ajouter aux listes sélectionnées ?
		// - ou ignorer ?
		if(count($modifier_format))
		{
			// pour l'instant: ignorer !
			// 
		}
		
		// redonner le bon statut visiteur aux nouveaux
		sql_update(array('spip_auteurs'), array('statut' => sql_quote('6forum')), array('statut='.sql_quote($tmp_statut)));

		// fin des req

		$result_affiche .=
			($tt = ($ii = count($stack_new_auteurs)) + ($jj = count($modifier_format)))
			?	'<ul>'.PHP_EOL
				. '<li class="verdana2">'._T('spiplistes:nb_comptes_importees_en_ms_dont_'
										 , array('nb' => $tt, 'ms' => (microtime(1) - $start_time)))
				. '<ul>'.PHP_EOL
					. '<li>'._T('spiplistes:nb_fiches_crees', array('nb' => $ii)).'</li>'.PHP_EOL
					//. '<li>'._T('spiplistes:nb_comptes_modifies', array('nb' => $jj)).'</li>'.PHP_EOL
					. '<li>'._T('spiplistes:nb_comptes_ignores', array('nb' => $jj)).'</li>'.PHP_EOL
				. '</ul>'.PHP_EOL
				. '</li>'.PHP_EOL
				. '</ul>'.PHP_EOL
			: '<br />'._T('spiplistes:pas_dimport').PHP_EOL
			;

		
		if($bad_dupli) {
			$result_affiche .= '<br />'._T('pass_erreur').' email: '._T('spiplistes:n_duplicata_mail', array('n' => $bad_dupli)).PHP_EOL;
		}
		if($bad_email) {
			$result_affiche .= '<br />'._T('pass_erreur').' email: '._T('spiplistes:n_incorrect_mail', array('n' => $bad_email)).PHP_EOL;
		}
		$result_affiche = _T('spiplistes:fichier_') . ' : <strong>'.$realname.'</strong><br />'.PHP_EOL
			. _T('spiplistes:' . ((count($abos_liste) > 1) ? 'Listes_de_destination_s' : 'Liste_de_destination_s')
				 , array('s' => '#' . implode(',#', $abos_liste))) .'<br />'.PHP_EOL
			. $result_affiche
			;
	}
	return($result_affiche);
}
/**
 * Synchroniser les utilisateurs Galette vers Spip.
 * 
 * @param  boolean $forcer Forcer la synchronisation.
 * @return int     Retourne en cas de réussite le nombre de fiches mis à jour ;
 *  _ 0 lorsqu'une erreur inconnue est survenue ;
 *  _ -1 si la synchronisation a échouée ;
 *  _ -2 lorsque des erreurs sont survenues lors de la connexion à la BDD ;
 *  _ -10 si la synchronisation est inutile.
 **/
function galettonuts_synchroniser($forcer = false)
{
    // Lecture de la configuration
    if (!class_exists('L2_Spip_Plugin_Metas')) {
        include_spip('lib/L2/Spip/Plugin/Metas.class');
    }
    $config = new L2_Spip_Plugin_Metas('galettonuts_config');
    // Connexion à la base Galette
    $link = galettonuts_galette_db($config->lire('adresse_db'), $config->lire('login_db'), $config->lire('pass_db'), $config->lire('choix_db'));
    if (!$link) {
        spip_log('cron: Galettonuts, echec de connexion a la bdd de galette');
        return -2;
    }
    $synchro = new L2_Spip_Plugin_Metas('galettonuts_synchro');
    // La synchronisation est inutile.
    if (!$forcer && !is_null($synchro->lire('maj')) && galettonuts_a_jour($synchro->lire('maj'), $config->lire('prefix_db'), $link)) {
        return -10;
    } else {
        // Compteur d'utilisateurs traités
        $compteur = 0;
        // Tableau associatif zones/auteurs
        $ids = array();
        $maintenant = time();
        // Récupération des adhérents Galette
        $req = "SELECT `id_adh` AS `id`, `nom_adh` AS `nom`, `prenom_adh` AS `prenom`, `activite_adh` AS `actif`, " . "`login_adh` AS `login`, `mdp_adh` AS `pass`, `email_adh` AS `email` " . "FROM `" . $config->lire('prefix_db') . "adherents` WHERE 1;";
        $res = @mysql_query($req, $link);
        // Pour chaque adhérent de galette
        while ($adh = @mysql_fetch_assoc($res)) {
            include_spip('inc/acces');
            include_spip('inc/charsets');
            // Formatage des informations de l'auteur à destination de Spip
            $login = unicode2charset(charset2unicode($adh['login'], 'iso-8859-15', 'forcer'));
            $email = unicode2charset(charset2unicode($adh['email'], 'iso-8859-15', 'forcer'));
            $nom = unicode2charset(charset2unicode(ucfirst($adh['prenom']) . ' ' . ucfirst($adh['nom']), 'iso-8859-15', 'forcer'));
            $alea_actuel = creer_uniqid();
            $alea_futur = creer_uniqid();
            $pass = $adh['pass'];
            $htpass = generer_htpass($pass);
            $mdpass = md5($alea_actuel . $pass);
            // Récupération de l'identifiant de l'auteur Spip, s'il existe
            $res2 = spip_query("SELECT `id_auteur` FROM `spip_galettonuts` WHERE `id_adh` = '{$adh['id']}';");
            if (spip_mysql_count($res2)) {
                $id_auteur = (int) @mysql_result($res2, 0);
            } else {
                $id_auteur = null;
            }
            // Mise à jour de l'auteur Spip
            if ($id_auteur) {
                $req = "UPDATE `spip_auteurs` SET " . "`nom` = " . _q($nom) . ", `email` = " . _q($email) . ", `login` = " . _q($login) . ", `pass` = " . _q($mdpass) . ", `htpass` = " . _q($htpass) . ", `alea_actuel` = " . _q($alea_actuel) . ", `alea_futur` = " . _q($alea_futur);
                if (1 != $adh['actif']) {
                    $req .= ", `statut` = " . _q('5poubelle');
                }
                $req .= ", `maj` = NOW()" . " WHERE `id_auteur` = " . _q($id_auteur);
                spip_query($req);
            } else {
                $statut = 1 == $adh['actif'] ? '6forum' : '5poubelle';
                $req = "INSERT INTO `spip_auteurs` (`nom`, `email`, `login`, `pass`, `htpass`, `alea_actuel`, `alea_futur`, `statut`) " . "VALUES (" . _q($nom) . ', ' . _q($email) . ', ' . _q($login) . ', ' . _q($mdpass) . ', ' . _q($htpass) . ', ' . _q($alea_actuel) . ', ' . _q($alea_futur) . ', ' . _q($statut) . ");";
                spip_query($req);
                unset($req);
                // Puisque la colonne id_auteur de la table spip_auteurs est
                // de type BIGINT, on ne peut utiliser mysql_insert_id() de PHP.
                $id_auteur = @mysql_result(spip_query("SELECT LAST_INSERT_ID();"), 0);
                $req = "INSERT INTO `spip_galettonuts` (`id_auteur`, `id_adh`) VALUES (" . _q($id_auteur) . ', ' . _q($adh['id']) . ');';
                spip_query($req);
            }
            spip_free_result($res2);
            // Hop, un utilisateur de synchronisé en plus
            ++$compteur;
            // Dans le cas où le plugin Accès Restreint est présent, on stocke
            // les identifiants des auteurs fraichement synchronisés associés
            // à une/des zone(s) définie lors de la configuration de Galettonuts
            if ($zones = $config->lire('zones')) {
                $ids[$id_auteur] = $zones;
                unset($zones);
            }
        }
        // while
        // La synchronisation est complète, on le sauvegarde
        $synchro->ajouter(array('maj' => $maintenant), true);
        // Association de zones aux auteurs synchronisés
        if (0 < count($ids)) {
            galettonuts_associer_zones($ids);
        }
        return $compteur;
    }
}
Beispiel #9
0
function auth_spip_modifier_pass($login, $new_pass, $id_auteur, $serveur=''){
	if (is_null($new_pass) OR auth_spip_verifier_pass($login, $new_pass,$id_auteur,$serveur)!='')
		return false;

	if (!$id_auteur = intval($id_auteur)
		OR !$auteur = sql_fetsel('login','spip_auteurs','id_auteur='.intval($id_auteur),'','','','',$serveur))
		return false;

	$c = array();
	include_spip('inc/acces');
	include_spip('auth/sha256.inc');
	$htpass = generer_htpass($new_pass);
	$alea_actuel = creer_uniqid();
	$alea_futur = creer_uniqid();
	$pass = _nano_sha256($alea_actuel.$new_pass);
	$c['pass'] = $pass;
	$c['htpass'] = $htpass;
	$c['alea_actuel'] = $alea_actuel;
	$c['alea_futur'] = $alea_futur;
	$c['low_sec'] = '';

	include_spip('inc/modifier');
	revision_auteur($id_auteur, $c); // manque la gestion de $serveur

}