From 5504708e3935e6514d0ecc56eec2b7f2c8667db3 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Tue, 8 Oct 2002 19:37:04 +0000 Subject: [PATCH] =?UTF-8?q?groupes=20d'utilisateurs=20(exp=C3=A9rimental)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/auteur_infos.php3 | 2 + ecrire/auteur_messagerie.php3 | 110 +++++++++++++++++++++--- ecrire/auteurs_edit.php3 | 3 +- ecrire/groupes.php3 | 156 ++++++++++++++++++++++++++++++++++ ecrire/inc_base.php3 | 20 ++++- ecrire/inc_presentation.php3 | 7 +- ecrire/inc_version.php3 | 2 +- 7 files changed, 285 insertions(+), 15 deletions(-) create mode 100644 ecrire/groupes.php3 diff --git a/ecrire/auteur_infos.php3 b/ecrire/auteur_infos.php3 index 6976b7cc39..78f85af65e 100644 --- a/ecrire/auteur_infos.php3 +++ b/ecrire/auteur_infos.php3 @@ -5,6 +5,7 @@ include_ecrire ("inc_acces.php3"); include_ecrire ("inc_logos.php3"); include_ecrire ("inc_session.php3"); include_ecrire ("inc_filtres.php3"); +include_ecrire ("inc_listes.php3"); // securite $id_auteur = floor($id_auteur); @@ -201,6 +202,7 @@ echo "<br><br><br>"; gros_titre($auteur['nom']); if (($connect_statut == "0minirezo") OR $connect_id_auteur == $id_auteur) { + $statut_auteur=$auteur['statut']; barre_onglets("auteur", "infos"); } diff --git a/ecrire/auteur_messagerie.php3 b/ecrire/auteur_messagerie.php3 index 215102d3b1..5ae56866a4 100644 --- a/ecrire/auteur_messagerie.php3 +++ b/ecrire/auteur_messagerie.php3 @@ -4,13 +4,7 @@ include ("inc.php3"); include_ecrire ("inc_acces.php3"); include_ecrire ("inc_index.php3"); include_ecrire ("inc_logos.php3"); - - -function supp_auteur($id_auteur) { - $query="UPDATE spip_auteurs SET statut='5poubelle' WHERE id_auteur=$id_auteur"; - $result=spip_query($query); -} - +include_ecrire ("inc_listes.php3"); function afficher_auteur_rubriques($leparent){ global $id_parent; @@ -49,8 +43,6 @@ if ($connect_id_auteur == $id_auteur) { } - - $query = "SELECT * FROM spip_auteurs WHERE id_auteur='$id_auteur'"; $result = spip_query($query); @@ -68,7 +60,8 @@ if ($row = spip_fetch_array($result)) { $pgp=$row["pgp"]; $messagerie=$row["messagerie"]; $imessage=$row["imessage"]; - + $abonne = $row['abonne']; + $abonne_pass = $row['abonne_pass']; if ($connect_id_auteur == $id_auteur) debut_page($nom_auteur, "redacteurs", "perso"); else if (ereg("5poubelle",$statut)) debut_page("$nom_auteur","redacteurs","redac-poubelle"); @@ -80,7 +73,8 @@ else debut_page("$nom_auteur","redacteurs","redacteurs"); echo "<br><br><br>"; gros_titre($nom); -if (($connect_statut == "0minirezo") OR $connect_id_auteur == $id_auteur) { +if (($connect_statut == "0minirezo") OR ($connect_id_auteur == $id_auteur)) { + $statut_auteur=$statut; barre_onglets("auteur", "messagerie"); } @@ -199,6 +193,100 @@ function mySel($varaut,$variable) { echo "</form>"; } + + // + // Listes de diffusion + // + if (($connect_id_auteur == $id_auteur) OR ($connect_statut == '0minirezo')) { + $res = get_listes($statut_auteur); + $nb_liste = mysql_num_rows($res); + if ($nb_liste > 0) { + + echo "<FORM ACTION='auteur_messagerie.php3?id_auteur=$id_auteur' METHOD='post'>"; + echo "<INPUT TYPE='Hidden' NAME='id_auteur' VALUE=\"$id_auteur\">"; + + debut_cadre_formulaire(); + + echo "<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3 WIDTH=\"100%\">"; + echo "<TR><TD BGCOLOR='$couleur_foncee' BACKGROUND='img_pack/rien.gif'><B><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3 COLOR='#FFFFFF'>Liste".(($nb_liste>1)?"s":"")." de diffusion</FONT></B>".aide ("listes")."</TD></TR>"; + echo "<TR><TD BACKGROUND='img_pack/rien.gif'>"; + echo "<FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=2>Vous pouvez vous inscrire aux listes suivantes :</FONT>"; + echo "</TD></TR>"; + + $mes_abos = explode(",",$abonne); + $mes_abos_new = array(); + while ($row = mysql_fetch_array($res)) { + $id_liste = $row['id_liste']; + + // suis-je abonne ? + $abo = false; + while (list(,$id) = each($mes_abos)) + if ($id == $id_liste) // j'etais abonne + $abo = true; + $change_liste = "abo_liste$id_liste"; + if ($$change_liste == 'oui') // je m'abonne + $abo = true; + else if ($$change_liste == 'non') // me desabonne + $abo = false; + + if ($abo) $mes_abos_new[] = $id_liste; + + if ($abo) + echo debut_cadre_relief(); + else + echo debut_cadre_enfonce(); + + echo "<table width='100%'><tr><td valign='top'>\n"; + echo "<FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3 COLOR='#000000'>"; + echo $row['titre']; + echo "</FONT><br>\n"; + echo "<FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=2 COLOR='#000000'>"; + + echo "<p>".propre($row['descriptif'])."</p></font>\n</td><td valign='top'><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=2>"; + + echo "<INPUT TYPE='radio' NAME='abo_liste$id_liste' VALUE='oui' id='on_liste$id_liste'"; + if ($abo) echo " CHECKED><B>"; + else echo ">"; + echo " <label for='on_liste$id_liste'>Abonné</label>"; + if ($abo) echo "</B>"; + echo "<BR><INPUT TYPE='radio' NAME='abo_liste$id_liste' VALUE='non' id='off_liste$id_liste'"; + if (!$abo) echo " CHECKED><B>"; + else echo ">"; + echo " <label for='off_liste$id_liste'>Désabonné</label>"; + if (!$abo) echo "</B>"; + + echo "</font></td></tr></table>\n"; + + if ($abo) + echo fin_cadre_relief(); + else + echo fin_cadre_enfonce(); + } + + // maj de la base + $abonne_new = join(",", $mes_abos_new); + if ($abonne_new <> $abonne) + spip_query("UPDATE spip_auteurs SET abonne='$abonne_new' WHERE id_auteur=$id_auteur"); + + // gestion d'un mot de passe de listes + if ($abonne_pass == '') + $abonne_pass = substr(creer_uniqid(),0,8); + if ($abonne_pass) + spip_query("UPDATE spip_auteurs SET abonne_pass='$abonne_pass' WHERE id_auteur=$id_auteur"); + if ((lire_meta('donner_abonne_pass') == 'oui') AND ($connect_id_auteur == $id_auteur)) + echo propre("<small>Si le gestionnaire de listes vous demande un mot de passe, indiquez <code>$abonne_pass</code></small>"); + + echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondo' NAME='Valider' VALUE='Valider'></DIV>"; + + echo "</TABLE>\n"; + } + + fin_cadre_formulaire(); + + echo "</form>"; + } + + } diff --git a/ecrire/auteurs_edit.php3 b/ecrire/auteurs_edit.php3 index 5fbe4d4c13..09c614b167 100644 --- a/ecrire/auteurs_edit.php3 +++ b/ecrire/auteurs_edit.php3 @@ -4,7 +4,7 @@ include ("inc.php3"); include_ecrire ("inc_acces.php3"); include_ecrire ("inc_index.php3"); include_ecrire ("inc_logos.php3"); - +include_ecrire ("inc_listes.php3"); function supp_auteur($id_auteur) { $query="UPDATE spip_auteurs SET statut='5poubelle' WHERE id_auteur=$id_auteur"; @@ -71,6 +71,7 @@ echo "<br><br><br>"; gros_titre($nom); if (($connect_statut == "0minirezo") OR $connect_id_auteur == $id_auteur) { + $statut_auteur=$statut; barre_onglets("auteur", "auteur"); } diff --git a/ecrire/groupes.php3 b/ecrire/groupes.php3 new file mode 100644 index 0000000000..1323b029c8 --- /dev/null +++ b/ecrire/groupes.php3 @@ -0,0 +1,156 @@ +<?php + include ("inc.php3"); + include_ecrire ("inc_connect.php3"); + include_ecrire ("inc_auth.php3"); + include_ecrire ("inc_meta.php3"); + + if ((lire_meta("mailing_list_manager") == $connect_id_auteur) + OR ($connect_statut == '0minirezo')) + { + if ($show_list) { + @header("Content-Type: text/plain"); + + // la liste est donnee par son numero ou par son titre + if (! ereg("^[0-9]+$", $show_list)) { + $res = spip_query("SELECT id_liste FROM spip_listes WHERE titre='".addslashes($show_list)."' LIMIT 0,1"); + if ($row = spip_fetch_array($res)) + $show_list = $row['id_liste']; + else { + @Header("Content-Type: text/plain"); + echo "\t\t// No list by that name : $show_list\n"; + exit; + } + } + + $query = "SELECT auteurs.* FROM spip_auteurs AS auteurs, spip_listes AS listes WHERE FIND_IN_SET(auteurs.statut, listes.droits) AND FIND_IN_SET($show_list,auteurs.abonne) AND id_liste=$show_list"; + $res = spip_query($query); + if ($res AND (spip_num_rows($res) > 0)) { + if ($format=='sendmail') + @header("Content-Type: text/plain"); + + while ($row = spip_fetch_array($res)) + if (email_valide($row['email'])) { + $nom = $row['nom']; // a sanitizer ! + $passliste = $row['abonne_pass']; // idem ! + if ($format == 'sendmail') + echo "$nom <".$row['email'].">"; + else + echo $row['email']."\t$passliste\t<a href='auteur_messagerie.php3?id_auteur=".$row['id_auteur']."'>$nom</a><br>"; + + echo "\n"; + $subs ++; + } + if ($format == 'sendmail') {} + else + echo "\t\t // $subs subscriber(s)\n"; + } else + echo "\t\t// 0 subscriber, empty list\n"; + exit; + } + else { + // traiter les elements POSTes + $lien = $clean_link; + if ($modif_liste == 'oui') { + modifier_liste($id_liste, $titre, $descriptif, $droits, $statut); + $lien->addVar('modif_liste', 'non'); + } + + if ($creer_liste == 'oui') { + $query = "INSERT INTO spip_listes + (titre, descriptif, droits, statut) VALUES + ('Nouvelle liste', '', '0minirezo,1comite', 'prepa')"; + spip_query($query); + $lien->addVar('creer_liste', 'non'); + } + + if ($HTTP_POST_VARS) { + @Header("Location: ".$lien->getUrl()); + exit; + } + + // afficher la liste des listes connues de spip + debut_page("Gestion de listes de diffusion"); + debut_gauche(); + debut_droite(); + gros_titre("Listes de diffusion"); + + echo "<p>" . propre("{{Ceci est une fonctionnalité + expérimentale:}} SPIP peut fabriquer des listes de + diffusion prêtes à injecter dans un serveur de + listes.") . aide("liste") . "<p>" . propre("Il vous faut pour + cela:\n-# Créer un administrateur dédié + disposant d'un login et d'un mot de passe (on peut régler + sa messagerie sur «ne pas apparaître sur la liste + des auteurs connectés»...)\n-# Indiquer ci-dessous + la configuration des listes;\n-# Tester la fabrication, par + SPIP, des fichiers contenant les listes d'abonnés;\n-# + Configurer votre gestionnaire de listes pour qu'il accepte de + lire ces fichiers."); + + // liste des listes + $result = spip_query("SELECT * FROM spip_listes"); + if (spip_num_rows($result) == 0) + echo "\n<p>". propre("{{Ce site ne propose pas de listes de diffusion.}}"); + else while ($row = spip_fetch_array($result)) { + if ($row['statut'] == 'prepa') + debut_cadre_enfonce(); + else + debut_cadre_relief(); + $lien = $GLOBALS['clean_link']; + $lien->addVar('id_liste', $row['id_liste']); + $lien->addVar('modif_liste', 'oui'); + echo "\n".$lien->getForm('post'); + echo "<table width='100%'><tr><td valign='top'>\n"; + echo "<b>".$row['id_liste']."</b> - adresse de la liste :\n"; + echo "<br><input type='text' name='titre' value='".entites_html($row['titre'])."'>\n"; + list($selected_tous,$selected_admin) = ($row['droits']<>'0minirezo') ? array("SELECTED","") : array("","SELECTED"); + echo "<br>Qui peut s'inscrire :<br><select name='droits'><OPTION VALUE='0minirezo,1comite' $selected_tous>Tous les auteurs\n<OPTION VALUE='0minirezo' $selected_admin>Les administrateurs uniquement\n</select>"; + list($selected_prepa,$selected_publie) = ($row['statut']<>'publie') ? array("SELECTED","") : array("","SELECTED"); + echo "<br>Statut :<br><select name='statut'><OPTION VALUE='prepa' $selected_prepa>en préparation\n<OPTION VALUE='publie' $selected_publie>active\n</select>"; + if (!email_valide($row['titre'])) + echo "<p><font color='red' size='-1'>> Cette liste ne pourra être active que lorsque que vous aurez indiqué une adresse email valide.</font>\n"; + echo "</td><td valign='top'>Descriptif : ".propre($row['descriptif']); + echo "<br><input type='text' name='descriptif' value='".entites_html($row['descriptif'])."'>\n"; + + $lien = $clean_link; + $lien->addVar('show_list', $row['id_liste']); + + echo "<p><small><a href='".$lien->getUrl()."'>Voir les abonnés.</a></small>"; + + echo "</td></tr><tr><td valign='top'></td>\n"; + echo "<td valign='top'>"; + + echo "<div align='right'><input type='submit' name='Modifier' value='Modifier' class='fondo'></div></td></tr></table>\n"; + echo "</form>\n"; + + if ($row['statut'] == 'prepa') + fin_cadre_enfonce(); + else + fin_cadre_relief(); + } + + // bouton creation nouvelle liste + $lien = $GLOBALS['clean_link']; + $lien->addVar('creer_liste', 'oui'); + echo "\n".$lien->getForm('post'); + echo "<div align='right'><input type='submit' name='creer' + value='Ajouter une liste' class='fondo'></div></form>\n"; + fin_page(); + } + } + else { + echo "Vous n'avez pas accès à ces données."; + } + + function modifier_liste($id_liste, $titre, $descriptif, $droits, $statut) { + if (!email_valide($titre)) + $statut = 'prepa'; + $titre = addslashes(corriger_caracteres($titre)); + $descriptif = addslashes(corriger_caracteres($descriptif)); + if ($droits <> '0minirezo') $droits = '0minirezo,1comite'; + if ($statut <> 'publie') $statut = 'prepa'; + settype($id_liste, 'integer'); + spip_query("UPDATE spip_listes SET titre='$titre', descriptif='$descriptif', droits='$droits', statut='$statut' WHERE id_liste=$id_liste"); + } + +?> \ No newline at end of file diff --git a/ecrire/inc_base.php3 b/ecrire/inc_base.php3 index 01acc1537d..085996dcdc 100644 --- a/ecrire/inc_base.php3 +++ b/ecrire/inc_base.php3 @@ -62,6 +62,8 @@ function creer_base() { alea_actuel tinytext NOT NULL, alea_futur tinytext NOT NULL, prefs tinytext NOT NULL, + abonne text NOT NULL, + abonne_pass tinytext NOT NULL, cookie_oubli tinytext NOT NULL, source VARCHAR(10) DEFAULT 'spip' NOT NULL, PRIMARY KEY (id_auteur), @@ -212,7 +214,6 @@ function creer_base() { KEY url (url))"; $result = spip_query($query); - // // Elements interactifs // @@ -271,6 +272,17 @@ function creer_base() { KEY statut(statut))"; $result = spip_query($query); + $query = "CREATE TABLE spip_listes ( + id_liste bigint(21) DEFAULT '0' NOT NULL auto_increment, + titre text NOT NULL, + statut VARCHAR(10) NOT NULL, + descriptif blob NOT NULL, + droits text NOT NULL, + maj TIMESTAMP, + KEY id_liste (id_liste) + )"; + $result = spip_query($query); + $query = "CREATE TABLE spip_visites_temp ( ip INTEGER UNSIGNED NOT NULL, type ENUM('article', 'rubrique', 'breve', 'autre') NOT NULL, @@ -1042,6 +1054,12 @@ function maj_base() { spip_query("ALTER TABLE spip_auteurs ADD source VARCHAR(10) DEFAULT 'spip' NOT NULL"); } + if ($version_installee < 1.467) { + // gestion de listes de diff + spip_query("ALTER TABLE spip_auteurs ADD abonne TEXT NOT NULL"); + spip_query("ALTER TABLE spip_auteurs ADD abonne_pass TINYTEXT NOT NULL"); + } + // // Mettre a jour le numero de version installee // diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3 index b993fd927b..e4a6d29363 100644 --- a/ecrire/inc_presentation.php3 +++ b/ecrire/inc_presentation.php3 @@ -941,7 +941,7 @@ function onglet($texte, $lien, $onglet_ref, $onglet, $icone=""){ function barre_onglets($rubrique, $onglet){ - global $id_auteur, $connect_id_auteur; + global $id_auteur, $connect_id_auteur, $connect_statut, $statut_auteur; debut_onglet(); @@ -967,6 +967,11 @@ function barre_onglets($rubrique, $onglet){ onglet("Informations personnelles", "auteur_infos.php3?id_auteur=$id_auteur", "infos", $onglet, "fiche-perso-24.gif"); if ($activer_messagerie!="non" AND $connect_id_auteur == $id_auteur){ onglet("Messagerie", "auteur_messagerie.php3?id_auteur=$id_auteur", "messagerie", $onglet, "messagerie-24.gif"); + } else if ($connect_statut == '0minirezo') { // voir s'il y a des listes + $res = get_listes ($statut_auteur); + $nb_liste = mysql_num_rows($res); + if ($nb_liste>0) + onglet("Liste" . (($nb_liste>1)?"s":"") ." de diffusion", "auteur_messagerie.php3?id_auteur=$id_auteur", "messagerie", $onglet, "messagerie-24.gif"); } //onglet("Données de connexion", "auteur_connexion.php3?id_auteur=$id_auteur", "connexion", $onglet, "base-24.gif"); } diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index 8156899134..3e15cd911d 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -12,7 +12,7 @@ define("_ECRIRE_INC_VERSION", "1"); // // version de la base -$spip_version = 1.466; +$spip_version = 1.467; // version de spip // (mettre a jour a la main et conserver la mention "CVS") -- GitLab