From 99aeb7245a110874e21dc5369cce4996ef692e7c Mon Sep 17 00:00:00 2001 From: x2000habouzit Date: Thu, 18 Nov 2004 13:45:47 +0000 Subject: [PATCH] continue the work on #185 --- htdocs/admin/utilisateurs.php | 40 +++------- htdocs/inscription/step4.php | 5 +- include/inscription_forums_base.inc.php | 76 ------------------ include/inscription_listes_base.inc.php | 42 ---------- include/user.func.inc.php | 131 ++++++++++++++++++++++++++++++++ include/xorg.misc.inc.php | 92 +++++++++++----------- scripts/mailman/mailman-rpc.py | 23 +++++- templates/admin/utilisateurs.tpl | 16 +++- 8 files changed, 224 insertions(+), 201 deletions(-) delete mode 100644 include/inscription_forums_base.inc.php delete mode 100644 include/inscription_listes_base.inc.php create mode 100644 include/user.func.inc.php diff --git a/htdocs/admin/utilisateurs.php b/htdocs/admin/utilisateurs.php index ae5e569..bdf483e 100644 --- a/htdocs/admin/utilisateurs.php +++ b/htdocs/admin/utilisateurs.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: utilisateurs.php,v 1.30 2004-11-17 10:49:50 x2000habouzit Exp $ + $Id: utilisateurs.php,v 1.31 2004-11-18 13:45:47 x2000habouzit Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); @@ -129,7 +129,8 @@ if(isset($mr)) { perms='{$_REQUEST['permsN']}', prenom='{$_REQUEST['prenomN']}', nom='{$_REQUEST['nomN']}', - promo='{$_REQUEST['promoN']}' + promo='{$_REQUEST['promoN']}', + comment='{$_REQUEST['commentN']}' WHERE user_id='{$_REQUEST['user_id']}'"; $globals->db->query($query); $r=$globals->db->query("SELECT * @@ -152,44 +153,25 @@ if(isset($mr)) { . "Opérations effectuées\n\n\"".$query . "\"\n\nCe rapport a été généré par le script d'administration"; $mailer->addTo("web@polytechnique.org"); - $mailer->setSubject("INTERVENTION ADMIN",$msg); + $mailer->setSubject("INTERVENTION ADMIN"); + $mailer->setTxtBody($msg); $mailer->send(); break; // DELETE FROM auth_user_md5 case "u_kill": - - $user_id = $_REQUEST['user_id']; - - $query = "DELETE FROM auth_user_md5 WHERE user_id='$user_id'"; - $globals->db->query($query); - $globals->db->query("delete from emails where uid=$user_id"); - $globals->db->query("delete from binets_ins where user_id=$user_id"); - $globals->db->query("delete from groupesx_ins where guid=$user_id"); - $globals->db->query("delete from photo where uid=$user_id"); - $globals->db->query("delete from perte_pass where uid=$user_id"); - $globals->db->query("delete from user_changes where user_id=$user_id"); - $globals->db->query("delete from aliases where id=$user_id and type in ('a_vie','alias')"); - $globals->db->query("delete from listes_ins where idu=$user_id"); - $globals->db->query("delete from listes_mod where idu=$user_id"); - $globals->db->query("delete from applis_ins where uid=$user_id"); - $globals->db->query("delete from contacts where uid=$user_id"); - $globals->db->query("delete from contacts where contact=$user_id"); - // on purge les entrees dans logger - $res=$globals->db->query("select id from logger.sessions where uid=$user_id"); - while (list($session_id)=mysql_fetch_row($res)) - $globals->db->query("delete from logger.events where session=$session_id"); - $globals->db->query("delete from logger.sessions where uid=$user_id"); - - $errors[] = "'$user_id' a été supprimé !"; + require_once("user.func.inc.php"); + user_clear_all_subs($_REQUEST['user_id']); + $errors[] = "'{$_REQUEST['user_id']}' a été désinscrit !"; require_once("diogenes.hermes.inc.php"); $mailer = new HermesMailer(); $mailer->setFrom("webmaster@polytechnique.org"); $msg = "Intervention manuelle de l'administrateur login=".$_SESSION['forlife']." (UID=".$_SESSION['uid'].")\n\n" - . "Opérations effectuées\n\n\"".$query + . "Opérations effectuées : utilisateur {$_REQUEST['user_id']} effacé\n\n\"" . "\"\n\nCe rapport a été généré par le script d'administration"; $mailer->addTo("web@polytechnique.org"); - $mailer->setSubject("INTERVENTION ADMIN",$msg); + $mailer->setSubject("INTERVENTION ADMIN"); + $mailer->setTxtBody($msg); $mailer->send(); break; } diff --git a/htdocs/inscription/step4.php b/htdocs/inscription/step4.php index 9f1ac91..52d8611 100644 --- a/htdocs/inscription/step4.php +++ b/htdocs/inscription/step4.php @@ -18,14 +18,13 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: step4.php,v 1.13 2004-11-17 10:49:50 x2000habouzit Exp $ + $Id: step4.php,v 1.14 2004-11-18 13:45:47 x2000habouzit Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); new_skinned_page('inscription/step4.tpl', AUTH_PUBLIC); -require("inscription_listes_base.inc.php"); -require("inscription_forums_base.inc.php"); +require("user.func.inc.php"); require('tpl.mailer.inc.php'); define("ERROR_REF", 1); diff --git a/include/inscription_forums_base.inc.php b/include/inscription_forums_base.inc.php deleted file mode 100644 index 0a92d7b..0000000 --- a/include/inscription_forums_base.inc.php +++ /dev/null @@ -1,76 +0,0 @@ -db->query("SELECT fid FROM forums.list WHERE nom='xorg.promo.x$promo'"); - if (!list($fid)=mysql_fetch_row($result)) { // pas de forum promo, il faut le créer - $req_au=$globals->db->query("SELECT count(*) FROM auth_user_md5 WHERE promo='$promo' AND perms!='non-inscrit'"); - list($effau) = mysql_fetch_row($req_au); - $req_id=$globals->db->query("SELECT count(*) FROM auth_user_md5 WHERE promo='$promo'"); - list($effid) = mysql_fetch_row($req_id); - if (5*$effau>$effid) { // + de 20% d'inscrits - $mymail = new TplMailer('forums.promo.tpl'); - $mymail->assign('promo', $promo); - $mymail->send(); - } - $fid = false; - } - mysql_free_result($result); - if ($fid) { - $globals->db->query("INSERT INTO forums.abos (fid,uid) VALUES ('$fid','$uid')"); - $res = !($globals->db->err()); - } else $res = false; - return $res; -} - - -/** inscrit UID aux forums par défaut - * @param $uid UID - * @return la reponse MySQL globale - * @see step4.php - */ -function inscription_forums($uid) { - global $globals; - $res = true; - $cible = array('xorg.general','xorg.pa.emploi','xorg.pa.divers','xorg.pa.logements'); - while (list ($key, $val) = each ($cible)) { - $result=$globals->db->query("SELECT fid FROM forums.list WHERE nom='$val'"); - list($fid)=mysql_fetch_row($result); - $globals->db->query("INSERT INTO forums.abos (fid,uid) VALUES ('$fid','$uid')"); - $res = $res and !($globals->db->err()); - } - return $res; -} - - - -?> diff --git a/include/inscription_listes_base.inc.php b/include/inscription_listes_base.inc.php deleted file mode 100644 index 14ff988..0000000 --- a/include/inscription_listes_base.inc.php +++ /dev/null @@ -1,42 +0,0 @@ -subscribe("promo$promo"); - subscribe_nl(); -} - -?> diff --git a/include/user.func.inc.php b/include/user.func.inc.php new file mode 100644 index 0000000..0991290 --- /dev/null +++ b/include/user.func.inc.php @@ -0,0 +1,131 @@ +db->query("select alias from aliases where type='a_vie' AND id=$uid"); + list($alias) = mysql_fetch_row($res); + mysql_free_result($res); + $globals->db->query("delete from virtual_redirect where redirect ='$alias@m4x.org'"); + $globals->db->query("delete from virtual_redirect where redirect ='$alias@polytechnique.org'"); + + $globals->db->query("update auth_user_md5 SET passwd='',perms='non-inscrit' WHERE user_id=$uid"); + $globals->db->query("update auth_user_quick SET watch_flags='' WHERE user_id=$uid"); + + $globals->db->query("delete from competences_ins where uid=$user_id"); + $globals->db->query("delete from emails where uid=$uid"); + $globals->db->query("delete from entreprises where uid=$user_id"); + $globals->db->query("delete from langues_ins where uid=$user_id"); + $globals->db->query("delete from mentor_pays where uid=$user_id"); + $globals->db->query("delete from mentor_secteur where uid=$user_id"); + $globals->db->query("delete from mentor where uid=$user_id"); + $globals->db->query("delete from newsletter_ins where user_id=$uid"); + $globals->db->query("delete from perte_pass where uid=$uid"); + $globals->db->query("delete from requests where user_id=$uid"); + $globals->db->query("delete from user_changes where user_id=$uid"); + $globals->db->query("delete from watch_sub where uid=$uid"); + + require_once('xml-rpc-client.inc.php'); + $client = new xmlrpc_client("http://{$_SESSION['uid']}:{$_SESSION['password']}@localhost:4949/polytechnique.org"); + $client->kill($alias); +} + +/** inscrit l'uid donnée au forum promo + * @param $uid UID + * @param $promo promo + * @return la reponse MySQL + * @see step4.php + */ +function inscription_forum_promo($uid,$promo) { + global $globals; + // récupération de l'id du forum promo + $result=$globals->db->query("SELECT fid FROM forums.list WHERE nom='xorg.promo.x$promo'"); + if (!list($fid)=mysql_fetch_row($result)) { // pas de forum promo, il faut le créer + $req_au=$globals->db->query("SELECT count(*) FROM auth_user_md5 WHERE promo='$promo' AND perms!='non-inscrit'"); + list($effau) = mysql_fetch_row($req_au); + $req_id=$globals->db->query("SELECT count(*) FROM auth_user_md5 WHERE promo='$promo'"); + list($effid) = mysql_fetch_row($req_id); + if (5*$effau>$effid) { // + de 20% d'inscrits + require_once("tpl.mailer.inc.php"); + $mymail = new TplMailer('forums.promo.tpl'); + $mymail->assign('promo', $promo); + $mymail->send(); + } + $fid = false; + } + mysql_free_result($result); + if ($fid) { + $globals->db->query("INSERT INTO forums.abos (fid,uid) VALUES ('$fid','$uid')"); + $res = !($globals->db->err()); + } else $res = false; + return $res; +} + +/** inscrit UID aux forums par défaut + * @param $uid UID + * @return la reponse MySQL globale + * @see step4.php + */ +function inscription_forums($uid) { + global $globals; + $res = true; + $cible = array('xorg.general','xorg.pa.emploi','xorg.pa.divers','xorg.pa.logements'); + while (list ($key, $val) = each ($cible)) { + $result=$globals->db->query("SELECT fid FROM forums.list WHERE nom='$val'"); + list($fid)=mysql_fetch_row($result); + $globals->db->query("INSERT INTO forums.abos (fid,uid) VALUES ('$fid','$uid')"); + $res = $res and !($globals->db->err()); + } + return $res; +} + + +/** inscrit l'uid donnée à la promo + * @param $uid UID + * @param $promo promo + * @return reponse MySQL + * @see admin/RegisterNewUser.php + * @see step4.php + */ +function inscription_listes_base($uid,$pass,$promo) { + require_once('xml-rpc-client.inc.php'); + require_once('newsletter.inc.php'); + global $globals; + // récupération de l'id de la liste promo + $client = new xmlrpc_client("http://$uid:$pass@localhost:4949/polytechnique.org"); + $client->subscribe("promo$promo"); + subscribe_nl(); +} + +?> diff --git a/include/xorg.misc.inc.php b/include/xorg.misc.inc.php index e989557..a5ef38a 100644 --- a/include/xorg.misc.inc.php +++ b/include/xorg.misc.inc.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: xorg.misc.inc.php,v 1.8 2004-10-29 14:59:26 x2000habouzit Exp $ + $Id: xorg.misc.inc.php,v 1.9 2004-11-18 13:45:48 x2000habouzit Exp $ ***************************************************************************/ function quoted_printable_encode($input, $line_max = 76) { @@ -29,26 +29,26 @@ function quoted_printable_encode($input, $line_max = 76) { $output = ""; foreach ($lines as $j => $line) { - $linlen = strlen($line); - $newline = ""; - for($i = 0; $i < $linlen; $i++) { - $c = $line{$i}; - $dec = ord($c); - if ( ($dec == 32) && ($i == ($linlen - 1)) ) { + $linlen = strlen($line); + $newline = ""; + for($i = 0; $i < $linlen; $i++) { + $c = $line{$i}; + $dec = ord($c); + if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only - $c = "=20"; - } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { + $c = "=20"; + } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required - $c = $escape.strtoupper(sprintf("%02x",$dec)); - } - if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted - $output .= $newline.$escape.$eol; - $newline = " "; - } - $newline .= $c; - } // end of for - $output .= $newline; - if ($j= $line_max ) { // CRLF is not counted + $output .= $newline.$escape.$eol; + $newline = " "; + } + $newline .= $c; + } // end of for + $output .= $newline; + if ($jdb->query("select count(*) from aliases where alias='$email'"); - list($nb)=mysql_fetch_row($req); - mysql_free_result($req); - if ($nb>0) return true; + global $globals; - // reste à vérifier si c'est pas une adresse dans /etc/aliases - // surement possible en utilisant postmap -q $email hash:/etc/aliases + $req = $globals->db->query("select count(*) from aliases where alias='$email'"); + list($nb)=mysql_fetch_row($req); + mysql_free_result($req); + if ($nb>0) return true; - return false; + // reste à vérifier si c'est pas une adresse dans /etc/aliases + // surement possible en utilisant postmap -q $email hash:/etc/aliases + + return false; } /** vérifie si une adresse email convient comme adresse de redirection @@ -76,14 +76,14 @@ function isvalid_email_local($email) { * @return BOOL */ function isvalid_email_redirection($email) { - return isvalid_email($email) && - !preg_match("/@(polytechnique\.(org|edu)|melix\.(org|net)|m4x\.org)$/", $email); + return isvalid_email($email) && + !preg_match("/@(polytechnique\.(org|edu)|melix\.(org|net)|m4x\.org)$/", $email); } /* Un soundex en français posté par Frédéric Bouchery -Voici une adaptation en PHP de la fonction soundex2 francisée de Frédéric BROUARD (http://sqlpro.developpez.com/Soundex/). -C'est une bonne démonstration de la force des expressions régulières compatible Perl. -trouvé sur http://expreg.com/voirsource.php?id=40&type=Chaines%20de%20caract%E8res */ + Voici une adaptation en PHP de la fonction soundex2 francisée de Frédéric BROUARD (http://sqlpro.developpez.com/Soundex/). + C'est une bonne démonstration de la force des expressions régulières compatible Perl. + trouvé sur http://expreg.com/voirsource.php?id=40&type=Chaines%20de%20caract%E8res */ function soundex_fr($sIn) { // Si il n'y a pas de mot, on sort immédiatement @@ -122,18 +122,18 @@ function soundex_fr($sIn) } function make_forlife($prenom,$nom,$promo) { - /* on traite le prenom */ - $prenomUS=replace_accent(trim($prenom)); - $prenomUS=stripslashes($prenomUS); - - /* on traite le nom */ - $nomUS=replace_accent(trim($nom)); - $nomUS=stripslashes($nomUS); - - // calcul du login - $forlife = strtolower($prenomUS.".".$nomUS.".".$promo); - $forlife = str_replace(" ","-",$forlife); - $forlife = str_replace("'","",$forlife); - return $forlife; + /* on traite le prenom */ + $prenomUS=replace_accent(trim($prenom)); + $prenomUS=stripslashes($prenomUS); + + /* on traite le nom */ + $nomUS=replace_accent(trim($nom)); + $nomUS=stripslashes($nomUS); + + // calcul du login + $forlife = strtolower($prenomUS.".".$nomUS.".".$promo); + $forlife = str_replace(" ","-",$forlife); + $forlife = str_replace("'","",$forlife); + return $forlife; } ?> diff --git a/scripts/mailman/mailman-rpc.py b/scripts/mailman/mailman-rpc.py index d6ee13c..56675a7 100755 --- a/scripts/mailman/mailman-rpc.py +++ b/scripts/mailman/mailman-rpc.py @@ -18,7 +18,7 @@ #* Foundation, Inc., * #* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * #*************************************************************************** -# $Id: mailman-rpc.py,v 1.78 2004-11-11 23:08:57 x2000habouzit Exp $ +# $Id: mailman-rpc.py,v 1.79 2004-11-18 13:45:48 x2000habouzit Exp $ #*************************************************************************** import base64, MySQLdb, os, getopt, sys, MySQLdb.converters, sha, signal @@ -708,7 +708,7 @@ def check_options(userdesc,perms,vhost,listname,correct=False): return 0 #------------------------------------------------------------------------------- -# admin procedures [ soptions.php ] +# super-admin procedures # def get_all_lists(userdesc,perms,vhost): @@ -787,6 +787,23 @@ def create_list(userdesc,perms,vhost,listname,desc,advertise,modlevel,inslevel,o return 0 return 1 +def kill(userdesc,perms,vhost,alias): + for list in Utils.list_names(): + try: + mlist = MailList.MailList(list,lock=0) + except: + continue + try: + mlist.Lock() + mlist.ApprovedDeleteMember(alias+'@polytechnique.org',None,0,0) + mlist.Save() + mlist.Unlock() + print list + except: + mlist.Unlock() + return 1 + + #------------------------------------------------------------------------------- # server # @@ -860,6 +877,8 @@ server.register_function(check_options) # create server.register_function(get_all_lists) server.register_function(create_list) +# utilisateurs.php +server.register_function(kill) server.serve_forever() diff --git a/templates/admin/utilisateurs.tpl b/templates/admin/utilisateurs.tpl index 4d86a5d..30e4d92 100644 --- a/templates/admin/utilisateurs.tpl +++ b/templates/admin/utilisateurs.tpl @@ -17,7 +17,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: utilisateurs.tpl,v 1.21 2004-11-17 10:49:52 x2000habouzit Exp $ + $Id: utilisateurs.tpl,v 1.22 2004-11-18 13:45:49 x2000habouzit Exp $ ***************************************************************************} @@ -56,7 +56,7 @@ Attention, d - + @@ -144,6 +144,8 @@ function del_fwd(fwd) { @@ -163,6 +165,14 @@ function del_fwd(fwd) { + + + Commentaire + + + + + [Voir fiche] @@ -176,7 +186,7 @@ function del_fwd(fwd) { [Trombino] - + -- 2.1.4