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; }
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); }
/** * 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', '&')); }
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); } }
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()
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; } }
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 }