[90] | 1 | <?php |
---|
| 2 | |
---|
| 3 | if (!defined("_ECRIRE_INC_VERSION")) return; #securite |
---|
| 4 | |
---|
| 5 | include_spip('base/abstract_sql'); |
---|
| 6 | |
---|
| 7 | // Balise independante du contexte |
---|
| 8 | |
---|
| 9 | |
---|
| 10 | function balise_FORMULAIRE_ABONNEMENT ($p) { |
---|
| 11 | return calculer_balise_dynamique($p, 'FORMULAIRE_ABONNEMENT', array('id_liste')); |
---|
| 12 | } |
---|
| 13 | |
---|
| 14 | // args[0] indique une liste, mais ne sert pas encore |
---|
| 15 | // args[1] indique un eventuel squelette alternatif |
---|
| 16 | // [(#FORMULAIRE_ABONNEMENT{mon_squelette})] |
---|
| 17 | // un cas particulier est : |
---|
| 18 | // [(#FORMULAIRE_ABONNEMENT{listeX})] |
---|
| 19 | // qui permet d'afficher le formulaire d'abonnement a la liste numero X |
---|
| 20 | |
---|
| 21 | function balise_FORMULAIRE_ABONNEMENT_stat($args, $filtres) { |
---|
| 22 | if(!$args[1]) $args[1]='formulaire_abonnement'; |
---|
| 23 | preg_match_all("/liste([0-9]+)/x", |
---|
| 24 | $args[1], $matches); |
---|
| 25 | |
---|
| 26 | if($id_liste=intval($matches[1][0])) { |
---|
| 27 | $args[1]='formulaire_abonnement_une_liste'; |
---|
| 28 | $args[0]=$id_liste; |
---|
| 29 | } |
---|
| 30 | return array($args[0],$args[1]);} |
---|
| 31 | |
---|
| 32 | // Si inscriptions pas autorisees, retourner une chaine d'avertissement |
---|
| 33 | // Sinon inclusion du squelette |
---|
| 34 | // Si pas de nom ou pas de mail valide, premier appel rien d'autre a faire |
---|
| 35 | // Autrement 2e appel, envoyer un mail et le squelette ne produira pas de |
---|
| 36 | // formulaire. |
---|
| 37 | |
---|
| 38 | |
---|
| 39 | function balise_FORMULAIRE_ABONNEMENT_dyn($id_liste, $formulaire) { |
---|
| 40 | |
---|
| 41 | include_spip ("inc/meta"); |
---|
| 42 | include_spip ("inc/session"); |
---|
| 43 | include_spip ("inc/filtres"); |
---|
| 44 | include_spip ("inc/texte"); |
---|
| 45 | include_spip ("inc/meta"); |
---|
| 46 | include_spip ("inc/mail"); |
---|
| 47 | include_spip ("inc/acces"); |
---|
| 48 | |
---|
| 49 | |
---|
| 50 | //recuperation des variables utiles |
---|
| 51 | $oubli_pass = _request('oubli_pass'); |
---|
| 52 | $email_oubli = _request('email_oubli'); |
---|
| 53 | $type = _request('type'); |
---|
| 54 | $desabo = _request('desabo'); |
---|
| 55 | |
---|
| 56 | // recuperation de la config |
---|
| 57 | |
---|
| 58 | $acces_abonne = lire_meta('abonnement_config'); |
---|
| 59 | ($acces_abonne == 'membre') ? $acces_membres = 'oui' : $acces_membres = 'non'; |
---|
| 60 | |
---|
| 61 | // aller chercher le formulaire html qui va bien |
---|
| 62 | $formulaire = "formulaires/".$formulaire ; |
---|
| 63 | |
---|
| 64 | // code inscription au site ou/et a la lettre d'info |
---|
| 65 | |
---|
| 66 | $inscriptions_ecrire = (lire_meta("accepter_inscriptions") == "oui") ; |
---|
| 67 | $inscriptions_publiques = (lire_meta('accepter_visiteurs') == "oui"); |
---|
| 68 | unset($erreur); |
---|
| 69 | $affiche_formulaire=""; |
---|
| 70 | $inscription_redac =""; |
---|
| 71 | $inscription_visiteur =""; |
---|
| 72 | |
---|
| 73 | // envoyer le cookie de relance mot de passe si pass oublie |
---|
| 74 | if ($email_oubli) { |
---|
| 75 | if (email_valide($email_oubli)) { |
---|
| 76 | $res = spip_query("SELECT * FROM spip_auteurs WHERE email ="._q($email_oubli)); |
---|
| 77 | if ($row = spip_fetch_array($res)) { |
---|
| 78 | if ($row['statut'] == '5poubelle') |
---|
| 79 | $erreur = _T('pass_erreur_acces_refuse'); |
---|
| 80 | else { |
---|
| 81 | $cookie = creer_uniqid(); |
---|
| 82 | spip_query("UPDATE spip_auteurs SET cookie_oubli = "._q($cookie)." WHERE email ="._q($email_oubli)); |
---|
| 83 | |
---|
| 84 | $nom_site_spip = extraire_multi(lire_meta("nom_site")); |
---|
| 85 | $adresse_site = extraire_multi(lire_meta("adresse_site")); |
---|
| 86 | |
---|
| 87 | $message = _T('spiplistes:abonnement_mail_passcookie', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site, 'cookie' => $cookie)); |
---|
| 88 | |
---|
| 89 | if (envoyer_mail($email_oubli, "[$nom_site_spip] "._T('pass_oubli_mot'), $message)) |
---|
| 90 | $erreur = _T('pass_recevoir_mail'); |
---|
| 91 | else |
---|
| 92 | $erreur = _T('pass_erreur_probleme_technique'); |
---|
| 93 | } |
---|
| 94 | } |
---|
| 95 | else |
---|
| 96 | $erreur = _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($email_oubli))); |
---|
| 97 | } |
---|
| 98 | else |
---|
| 99 | $erreur = _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($email_oubli))); |
---|
| 100 | } |
---|
| 101 | |
---|
| 102 | // afficher le formulaire d'oubli du pass |
---|
| 103 | if($oubli_pass=="oui") { |
---|
| 104 | return array($formulaire, $GLOBALS['delais'], |
---|
| 105 | array( |
---|
| 106 | 'oubli_pass' => $oubli_pass, |
---|
| 107 | 'erreur' => $erreur, |
---|
| 108 | 'inscription_redac' => '', |
---|
| 109 | 'inscription_visiteur' => '', |
---|
| 110 | 'mode_login' => false, |
---|
| 111 | 'reponse_formulaire' => '', |
---|
| 112 | 'liste' => '' |
---|
| 113 | ) |
---|
| 114 | ); |
---|
| 115 | } |
---|
| 116 | //code pour s inscrire |
---|
| 117 | else if ($inscriptions_ecrire OR $inscriptions_publiques OR (lire_meta('forums_publics') == 'abo') ) { |
---|
| 118 | // debut presentation |
---|
| 119 | |
---|
| 120 | ($inscriptions_ecrire AND $type=="redac") ? $inscription_redac = "oui" : $inscription_redac = "non" ; |
---|
| 121 | ($type!="redac" AND $inscriptions_publiques AND $acces_membres=='oui') ? $inscription_visiteur = "oui" : $inscription_visiteur = "non" ; |
---|
| 122 | |
---|
| 123 | |
---|
| 124 | list($affiche_formulaire,$reponse_formulaire)=formulaire_inscription(($type=="redac")? 'redac' : 'forum',$acces_membres,$formulaire); |
---|
| 125 | } |
---|
| 126 | else { |
---|
| 127 | spip_log(_T('pass_erreur')." "._T('pass_rien_a_faire_ici')."visiteurs non autorises spip listes"); |
---|
| 128 | } |
---|
| 129 | |
---|
| 130 | |
---|
| 131 | return array($formulaire, $GLOBALS['delais'], |
---|
| 132 | array( |
---|
| 133 | 'oubli_pass' => $oubli_pass, |
---|
| 134 | 'erreur' => $erreur, |
---|
| 135 | 'inscription_redacteur' => $inscription_redac, |
---|
| 136 | 'acces_membres' => $acces_membres, |
---|
| 137 | 'inscription_visiteur' => $inscription_visiteur, |
---|
| 138 | 'mode_login' => $affiche_formulaire, |
---|
| 139 | 'reponse_formulaire' => $reponse_formulaire, |
---|
| 140 | 'accepter_auteur' => lire_meta("accepter_inscriptions") , |
---|
| 141 | 'id_liste' => $id_liste |
---|
| 142 | ) |
---|
| 143 | ); |
---|
| 144 | |
---|
| 145 | |
---|
| 146 | } |
---|
| 147 | |
---|
| 148 | |
---|
| 149 | // inscrire les visiteurs dans l'espace public (statut 6forum) ou prive (statut nouveau->1comite) |
---|
| 150 | function formulaire_inscription($type,$acces_membres,$formulaire) { |
---|
| 151 | |
---|
| 152 | $request_uri = $GLOBALS["REQUEST_URI"]."#abo"; |
---|
| 153 | global $mail_inscription_; |
---|
| 154 | global $nom_inscription_; |
---|
| 155 | global $list; |
---|
| 156 | global $liste; |
---|
| 157 | global $id_fond; //fond name of the form posting values |
---|
| 158 | |
---|
| 159 | |
---|
| 160 | if ($type == 'redac') { |
---|
| 161 | if (lire_meta("accepter_inscriptions") != "oui") return; |
---|
| 162 | $statut = "nouveau"; |
---|
| 163 | } |
---|
| 164 | else if ($type == 'forum') { |
---|
| 165 | $statut = "6forum"; |
---|
| 166 | } |
---|
| 167 | else { |
---|
| 168 | return; // tentative de hack...? |
---|
| 169 | } |
---|
| 170 | |
---|
| 171 | |
---|
| 172 | |
---|
| 173 | if($acces_membres == 'non') $nom_inscription_ = test_login2($mail_inscription_) ; |
---|
| 174 | |
---|
| 175 | //utiliser_langue_site(); |
---|
| 176 | $nomsite= extraire_multi(lire_meta("nom_site")); |
---|
| 177 | $urlsite=extraire_multi(lire_meta("adresse_site")); |
---|
| 178 | |
---|
| 179 | //Verify the form source. This way it is possible to create many newsletter forms |
---|
| 180 | //in the same page (but with different fond) to separate subscription and deletion as an example |
---|
| 181 | $verify_source_fond = false; |
---|
| 182 | if(!$id_fond) {$verify_source_fond = true;} |
---|
| 183 | elseif($id_fond==$formulaire) $verify_source_fond = true; |
---|
| 184 | |
---|
| 185 | if($mail_inscription_ && $verify_source_fond){ |
---|
| 186 | $mail_valide = email_valide($mail_inscription_); |
---|
| 187 | } |
---|
| 188 | |
---|
| 189 | if ($mail_valide && $nom_inscription_) { |
---|
| 190 | $result = spip_query("SELECT * FROM spip_auteurs WHERE email="._q($mail_inscription_)); |
---|
| 191 | |
---|
| 192 | //echo "<div class='reponse_formulaire'>"; |
---|
| 193 | |
---|
| 194 | // l'abonne existe deja. |
---|
| 195 | if ($row = spip_fetch_array($result)) { |
---|
| 196 | $id_auteur = $row['id_auteur']; |
---|
| 197 | $statut = $row['statut']; |
---|
| 198 | $abonne_existant = "oui" ; |
---|
| 199 | |
---|
| 200 | unset ($continue); |
---|
| 201 | if ($statut == '5poubelle') { |
---|
| 202 | $reponse_formulaire = _T('form_forum_access_refuse'); |
---|
| 203 | }elseif ($statut == 'nouveau') { |
---|
| 204 | spip_query ("DELETE FROM spip_auteurs WHERE id_auteur="._q($id_auteur)); |
---|
| 205 | $continue = true; |
---|
| 206 | }else{ |
---|
| 207 | // envoyer le cookie de relance modif abonnement |
---|
| 208 | |
---|
| 209 | $cookie = creer_uniqid(); |
---|
| 210 | spip_query("UPDATE spip_auteurs SET cookie_oubli = "._q($cookie)." WHERE email ="._q($mail_inscription_)); |
---|
| 211 | |
---|
| 212 | $message = _T('spiplistes:abonnement_mail_passcookie', array('nom_site_spip' => $nomsite, 'adresse_site' => $urlsite, 'cookie' => $cookie)); |
---|
| 213 | if (envoyer_mail($mail_inscription_, "[$nomsite] "._T('spiplistes:abonnement_titre_mail'), $message)){ |
---|
| 214 | $reponse_formulaire =_T('spiplistes:pass_recevoir_mail'); |
---|
| 215 | //echo _T('spiplistes:pass_recevoir_mail'); |
---|
| 216 | }else{ |
---|
| 217 | $reponse_formulaire =_T('pass_erreur_probleme_technique'); |
---|
| 218 | //echo _T('pass_erreur_probleme_technique'); |
---|
| 219 | } |
---|
| 220 | |
---|
| 221 | } |
---|
| 222 | } else { |
---|
| 223 | $continue = true; |
---|
| 224 | } |
---|
| 225 | |
---|
| 226 | // envoyer identifiants par mail |
---|
| 227 | if ($continue) { |
---|
| 228 | |
---|
| 229 | //ajouter un code pour retrouver l'abonne |
---|
| 230 | |
---|
| 231 | $pass = creer_pass_aleatoire(8, $mail_inscription_); |
---|
| 232 | $login_ = test_login2($mail_inscription_); |
---|
| 233 | $mdpass = md5($pass); |
---|
| 234 | $htpass = generer_htpass($pass); |
---|
| 235 | |
---|
| 236 | $cookie = creer_uniqid(); |
---|
| 237 | |
---|
| 238 | $type_abo = $GLOBALS['suppl_abo'] ; |
---|
| 239 | //verify suppl_abo is correct |
---|
| 240 | if($desabo!="oui" && $type_abo!="texte" && $type_abo!="html") return; |
---|
| 241 | |
---|
| 242 | $result = spip_query("INSERT INTO spip_auteurs (nom, email, login, pass, statut, htpass, cookie_oubli) ". |
---|
| 243 | "VALUES ("._q($nom_inscription_).", "._q($mail_inscription_).","._q($login_).","._q($mdpass).","._q($statut).","._q($htpass).","._q($cookie).")"); |
---|
| 244 | spip_log("insert inscription : ->".$mail_inscription_); |
---|
| 245 | $id_abo=spip_insert_id(); |
---|
| 246 | spip_query("INSERT INTO `spip_auteurs_elargis` (`id_auteur`,`spip_listes_format`) VALUES ("._q($id_abo).","._q($type_abo).")"); |
---|
| 247 | |
---|
| 248 | // abonnement aux listes http://www.phpfrance.com/tutorials/index.php?page=2&id=13 |
---|
| 249 | |
---|
| 250 | $result = spip_query("SELECT * FROM spip_auteurs WHERE email="._q($mail_inscription_)); |
---|
| 251 | |
---|
| 252 | // l'abonne existe deja. |
---|
| 253 | if ($row = spip_fetch_array($result)) { |
---|
| 254 | $id_auteur = $row['id_auteur']; |
---|
| 255 | $statut = $row['statut']; |
---|
| 256 | |
---|
| 257 | // on abonne l'auteur aux listes |
---|
| 258 | if(is_array($list)){ |
---|
| 259 | while( list(,$val) = each($list) ){ |
---|
| 260 | $result=spip_query("DELETE FROM spip_auteurs_listes WHERE id_auteur="._q($id_auteur)." AND id_liste="._q($val)); |
---|
| 261 | $result=spip_query("INSERT INTO spip_auteurs_listes (id_auteur,id_liste) VALUES ("._q($id_auteur).","._q($val).")"); |
---|
| 262 | } |
---|
| 263 | } |
---|
| 264 | } |
---|
| 265 | |
---|
| 266 | // abo |
---|
| 267 | |
---|
| 268 | ecrire_acces(); |
---|
| 269 | |
---|
| 270 | $nom_site_spip = extraire_multi(lire_meta("nom_site")); |
---|
| 271 | $adresse_site = extraire_multi(lire_meta("adresse_site")); |
---|
| 272 | |
---|
| 273 | $message = _T('form_forum_message_auto')."\n\n"._T('spiplistes:bonjour')."\n"; |
---|
| 274 | |
---|
| 275 | if ($desabo=="oui"){ |
---|
| 276 | $message .= _T('spiplistes:mail_non', array('nom_site_spip' => $nom_site_spip))."\n"; |
---|
| 277 | }else if($type_abo=="texte" || $type_abo=="html") { |
---|
| 278 | |
---|
| 279 | //SELECT des listes de l'abonne |
---|
| 280 | $result_list = spip_query("SELECT * FROM spip_auteurs_listes AS abonnements, spip_listes AS listes WHERE abonnements.id_auteur="._q($id_auteur)." AND abonnements.id_liste=listes.id_liste AND listes.statut='liste'"); |
---|
| 281 | |
---|
| 282 | //lister les listes |
---|
| 283 | $message_list = '' ; |
---|
| 284 | $i = 0 ; |
---|
| 285 | |
---|
| 286 | while($row = spip_fetch_array($result_list)) { |
---|
| 287 | $id_liste = $row['id_liste'] ; |
---|
| 288 | $result = spip_query("SELECT * FROM spip_listes WHERE id_liste="._q($id_liste)); |
---|
| 289 | $row = spip_fetch_array($result); |
---|
| 290 | $titre = $row['titre'] ; |
---|
| 291 | $message_list .= "\n- ".$titre ; |
---|
| 292 | $i++ ; |
---|
| 293 | } |
---|
| 294 | |
---|
| 295 | |
---|
| 296 | if($i>1){ |
---|
| 297 | $message .= "\n"._T('spiplistes:inscription_responses').$nom_site_spip."." ; |
---|
| 298 | $message .= "\n"._T('spiplistes:inscription_listes').$message_list ; |
---|
| 299 | } |
---|
| 300 | if($i==1){ |
---|
| 301 | $message .= "\n"._T('spiplistes:inscription_response').$nom_site_spip."." ; |
---|
| 302 | $message .= "\n"._T('spiplistes:inscription_liste').$message_list ; |
---|
| 303 | } |
---|
| 304 | if($i==0){ |
---|
| 305 | $message .= "\n"._T('spiplistes:inscription_response').$nom_site_spip._T('spiplistes:inscription_format').$type_abo."." ; |
---|
| 306 | } |
---|
| 307 | } |
---|
| 308 | |
---|
| 309 | if(($acces_membres == 'oui') && ($type == 'forum') ){ |
---|
| 310 | $message .="\n\n"._T('spiplistes:inscription_mail_forum', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site))."\n\n"; |
---|
| 311 | $message .= "- "._T('form_forum_login')." $login_\n"; |
---|
| 312 | $message .= "- "._T('form_forum_pass')." $pass\n\n"; |
---|
| 313 | } |
---|
| 314 | |
---|
| 315 | if(($type == 'redac') OR ($inscriptions_ecrire AND $acces_membres == 'non')) { |
---|
| 316 | $message .="\n\n"._T('spiplistes:inscription_mail_redac', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site))."\n\n"; |
---|
| 317 | $message .= "- "._T('form_forum_login')." $login_\n"; |
---|
| 318 | $message .= "- "._T('form_forum_pass')." $pass\n\n"; |
---|
| 319 | } |
---|
| 320 | |
---|
| 321 | |
---|
| 322 | } |
---|
| 323 | |
---|
| 324 | $message .= "\n\n-----------------------------------------\n\n" ; |
---|
| 325 | $message .= _T('spiplistes:abonnement_mail').' '.generer_url_public("abonnement","d=$cookie") ; |
---|
| 326 | $message .= "\n\n-----------------------------------------\n\n" ; |
---|
| 327 | |
---|
| 328 | if($abonne_existant != 'oui'){ |
---|
| 329 | |
---|
| 330 | if (envoyer_mail($mail_inscription_, "[$nom_site_spip] "._T('spiplistes:form_forum_identifiants'), $message)) { |
---|
| 331 | spip_log("inscription : ->".$mail_inscription_); |
---|
| 332 | if($acces_membres == 'oui'){ |
---|
| 333 | $reponse_formulaire =_T('form_forum_identifiant_mail'); |
---|
| 334 | }else{ |
---|
| 335 | $reponse_formulaire =_T('spiplistes:form_forum_identifiant_confirm'); |
---|
| 336 | } |
---|
| 337 | } |
---|
| 338 | else { |
---|
| 339 | $reponse_formulaire =_T('form_forum_probleme_mail'); |
---|
| 340 | } |
---|
| 341 | } |
---|
| 342 | |
---|
| 343 | } |
---|
| 344 | else { |
---|
| 345 | //Non c'è email o non è valida |
---|
| 346 | if($mail_inscription_ AND !$mail_valide && $verify_source_fond){ |
---|
| 347 | $reponse_formulaire =_T('spiplistes:erreur_adresse'); |
---|
| 348 | } |
---|
| 349 | |
---|
| 350 | //Infos sur la liste |
---|
| 351 | if(!$liste) $liste=''; |
---|
| 352 | return array(true,$reponse_formulaire); |
---|
| 353 | } |
---|
| 354 | return array(false,$reponse_formulaire); |
---|
| 355 | |
---|
| 356 | } |
---|
| 357 | |
---|
| 358 | |
---|
| 359 | |
---|
| 360 | function test_login2($mail) { |
---|
| 361 | if (strpos($mail, "@") > 0) $login_base = substr($mail, 0, strpos($mail, "@")); |
---|
| 362 | else $login_base = $mail; |
---|
| 363 | |
---|
| 364 | $login_base = strtolower($login_base); |
---|
| 365 | $login_base = ereg_replace("[^a-zA-Z0-9]", "", $login_base); |
---|
| 366 | if (!$login_base) $login_base = "user"; |
---|
| 367 | |
---|
| 368 | for ($i = 0; ; $i++) { |
---|
| 369 | if ($i) $login = $login_base.$i; |
---|
| 370 | else $login = $login_base; |
---|
| 371 | $result = spip_query("SELECT id_auteur FROM spip_auteurs WHERE login="._q($login)); |
---|
| 372 | if (!spip_num_rows($result)) break; |
---|
| 373 | } |
---|
| 374 | |
---|
| 375 | return $login; |
---|
| 376 | } |
---|
| 377 | |
---|
| 378 | |
---|
| 379 | ?> |
---|