From dc2073c35a769a0fe026897d2f597c99ef92e5d3 Mon Sep 17 00:00:00 2001
From: x2003bruneau
Date: Tue, 14 Nov 2006 11:14:56 +0000
Subject: [PATCH] #530: Can identify new members of a group as an unregistered
user of Polytechnique.org
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1077 839d8a87-29fc-0310-9880-83ba4fa771e5
---
ChangeLog | 1 +
modules/lists/lists.inc.php | 15 +++--
modules/xnetevents.php | 35 ++++++------
modules/xnetevents/xnetevents.inc.php | 30 +++++-----
modules/xnetgrp.php | 97 +++++++++++++++++++++++++++------
templates/xnet/groupe/announce-edit.tpl | 2 +-
templates/xnet/groupe/annuaire.tpl | 20 ++++---
templates/xnet/groupe/membres-add.tpl | 71 +++++++++++++++++++++---
templates/xnetevents/edit.tpl | 2 +-
9 files changed, 201 insertions(+), 72 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index fe549cb..4ec0f54 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -37,6 +37,7 @@ Bug/Wish:
* Events:
- #517: URL catcher update (www). -Car
- #525: Add a user-friendly id for newsletters -FRU
+ - #530: Members can be identified as a unregistered user -FRU
* Lists:
- #485: Can moderate pure-HTML mails -FRU
diff --git a/modules/lists/lists.inc.php b/modules/lists/lists.inc.php
index b8216c7..0b7f3c9 100644
--- a/modules/lists/lists.inc.php
+++ b/modules/lists/lists.inc.php
@@ -40,13 +40,20 @@ function list_sort_owners(&$members, $tri_promo = true) {
$membres[0][] = Array('l' => $mem);
}
} else {
- $res = XDB::query('SELECT m2.uid, m1.prenom, m1.nom
+ $res = XDB::query('SELECT m2.uid,
+ IF(m2.origine="X", u.prenom, m1.prenom) AS prenom,
+ IF(m2.origine="X", u.nom, m1.nom) AS nom,
+ IF(m2.origine="X", u.promo, "non-X") AS promo
FROM groupex.membres AS m1
LEFT JOIN groupex.membres AS m2 ON(m1.email=m2.email AND m2.asso_id={?})
+ LEFT JOIN auth_user_md5 AS u ON(m2.origine = "X" AND m2.uid = u.user_id)
WHERE m1.email={?}', $globals->asso('id'), $mem);
- if (list($uid, $prenom, $nom) = $res->fetchOneRow()) {
- $key = $tri_promo ? 0 : strtoupper($nom{0});
- $membres[$key][$nom.$m] = Array('n' => "$prenom $nom", 'l' => $mem, 'x' => $uid, 'p' => (!$tri_promo ? 'non-X' : null));
+ if (list($uid, $prenom, $nom, $promo) = $res->fetchOneRow()) {
+ $key = $tri_promo ? ($promo != 'non-X' ? $promo : 0) : strtoupper($nom{0});
+ if ($tri_promo) {
+ $promo = null;
+ }
+ $membres[$key][$nom.$m] = Array('n' => "$prenom $nom", 'l' => $mem, 'x' => $uid, 'p' => $promo);
} else {
$membres[0][] = Array('l' => $mem, 'p' => (!$tri_promo ? 'non-X' : null));
}
diff --git a/modules/xnetevents.php b/modules/xnetevents.php
index 15eaa7f..4aa57ee 100644
--- a/modules/xnetevents.php
+++ b/modules/xnetevents.php
@@ -505,19 +505,19 @@ class XnetEventsModule extends PLModule
// change the price paid by a participant
if (Env::v('adm') == 'prix' && $member) {
XDB::execute("UPDATE groupex.evenements_participants
- SET paid = IF(paid + {?} > 0, paid + {?}, 0)
- WHERE uid = {?} AND eid = {?}",
+ SET paid = IF(paid + {?} > 0, paid + {?}, 0)
+ WHERE uid = {?} AND eid = {?}",
strtr(Env::v('montant'), ',', '.'),
strtr(Env::v('montant'), ',', '.'),
- $member['uid'], $eid);
+ $member['uid'], $evt['eid']);
}
// change the number of personns coming with a participant
if (Env::v('adm') == 'nbs' && $member) {
$res = XDB::query("SELECT paid
- FROM groupex.evenements_participants
- WHERE uid = {?} AND eid = {?}",
- $member['uid'], $eid);
+ FROM groupex.evenements_participants
+ WHERE uid = {?} AND eid = {?}",
+ $member['uid'], $evt['eid']);
$paid = intval($res->fetchOneCell());
$nbs = Post::v('nb', array());
@@ -527,18 +527,19 @@ class XnetEventsModule extends PLModule
if ($nb) {
XDB::execute("REPLACE INTO groupex.evenements_participants
- VALUES ({?}, {?}, {?}, {?}, {?})",
- $eid, $member['uid'], $id, $nb, $paid);
+ VALUES ({?}, {?}, {?}, {?}, {?})",
+ $evt['eid'], $member['uid'], $id, $nb, $paid);
} else {
XDB::execute("DELETE FROM groupex.evenements_participants
- WHERE uid = {?} AND eid = {?} AND item_id = {?}",
- $member['uid'], $eid, $id);
+ WHERE uid = {?} AND eid = {?} AND item_id = {?}",
+ $member['uid'], $evt['eid'], $id);
}
}
- $res = XDB::query("SELECT uid FROM groupex.evenements_participants
- WHERE uid = {?} AND eid = {?}",
- $member['uid'], $eid);
+ $res = XDB::query("SELECT uid
+ FROM groupex.evenements_participants
+ WHERE uid = {?} AND eid = {?}",
+ $member['uid'], $evt['eid']);
$u = $res->fetchOneCell();
subscribe_lists_event($u, $member['uid'], $evt);
}
@@ -565,7 +566,7 @@ class XnetEventsModule extends PLModule
LEFT JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
LEFT JOIN auth_user_md5 AS u ON ( u.user_id = ep.uid )
WHERE ep.eid = {?} '.$whereitemid.'
- GROUP BY UPPER(SUBSTRING(IF(u.nom IS NULL,m.nom,u.nom), 1, 1))', $eid);
+ GROUP BY UPPER(SUBSTRING(IF(u.nom IS NULL,m.nom,u.nom), 1, 1))', $evt['eid']);
$alphabet = array();
$nb_tot = 0;
@@ -601,9 +602,9 @@ class XnetEventsModule extends PLModule
"SELECT IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom, u.prenom,
u.promo, a.alias AS email, t.montant
FROM {$globals->money->mpay_tprefix}transactions AS t
- INNER JOIN auth_user_md5 AS u ON(t.uid = u.user_id)
- INNER JOIN aliases AS a ON (a.id = t.uid AND a.type='a_vie' )
- LEFT JOIN groupex.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?})
+ INNER JOIN auth_user_md5 AS u ON(t.uid = u.user_id)
+ INNER JOIN aliases AS a ON (a.id = t.uid AND a.type='a_vie' )
+ LEFT JOIN groupex.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?})
WHERE t.ref = {?} AND ep.uid IS NULL",
$evt['eid'], $evt['paiement_id']);
$page->assign('oublis', $res->total());
diff --git a/modules/xnetevents/xnetevents.inc.php b/modules/xnetevents/xnetevents.inc.php
index 5a4de5e..1c3b147 100644
--- a/modules/xnetevents/xnetevents.inc.php
+++ b/modules/xnetevents/xnetevents.inc.php
@@ -117,24 +117,24 @@ function get_event_participants($evt, $item_id, $tri, $limit = '') {
$pay_id = $evt['paiement_id'];
$query =
- "SELECT IF(u.nom IS NULL,m.nom,IF(u.nom_usage<>'', u.nom_usage, u.nom)) AS nom,
- IF(u.nom IS NULL,m.prenom,u.prenom) AS prenom,
- IF(u.nom IS NULL,'extérieur',u.promo) AS promo,
- IF(u.nom IS NULL,m.email,a.alias) AS email,
- IF(u.nom IS NULL,0,FIND_IN_SET('femme', u.flags)) AS femme,
+ "SELECT IF(m.origine != 'X',m.nom,IF(u.nom_usage<>'', u.nom_usage, u.nom)) AS nom,
+ IF(m.origine != 'X',m.prenom,u.prenom) AS prenom,
+ IF(m.origine != 'X','extérieur',u.promo) AS promo,
+ IF(m.origine != 'X' OR u.perms = 'pending',m.email,a.alias) AS email,
+ IF(m.origine != 'X',m.sexe,FIND_IN_SET('femme', u.flags)) AS femme,
m.perms='admin' AS admin,
- NOT(u.nom IS NULL) AS x,
- ep.uid, ep.paid, SUM(nb) AS nb
- FROM groupex.evenements_participants AS ep
- INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
- LEFT JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
- LEFT JOIN auth_user_md5 AS u ON ( u.user_id = ep.uid )
- LEFT JOIN aliases AS a ON ( a.id = ep.uid AND a.type='a_vie' )
- WHERE ep.eid = {?}
+ (m.origine = 'X') AS x,
+ ep.uid, ep.paid, SUM(nb) AS nb
+ FROM groupex.evenements_participants AS ep
+ INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
+ LEFT JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
+ LEFT JOIN auth_user_md5 AS u ON ( u.user_id = ep.uid )
+ LEFT JOIN aliases AS a ON ( a.id = ep.uid AND a.type='a_vie' )
+ WHERE ep.eid = {?}
".(($item_id)?" AND item_id = $item_id":"")."
$where
- GROUP BY ep.uid
- ORDER BY $tri $limit";
+ GROUP BY ep.uid
+ ORDER BY $tri $limit";
if ($item_id) {
$res = XDB::query($query, $eid);
diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php
index ab4b9b2..66eef6d 100644
--- a/modules/xnetgrp.php
+++ b/modules/xnetgrp.php
@@ -34,12 +34,19 @@ function get_infos($email)
}
$res = XDB::query(
- "SELECT uid, nom, prenom, email, email AS email2, perms='admin', origine
+ "SELECT uid, nom, prenom, email, email AS email2, perms='admin', origine, sexe
FROM groupex.membres
WHERE $field = {?} AND asso_id = {?}", $email, $globals->asso('id'));
if ($res->numRows()) {
- return $res->fetchOneAssoc();
+ $user = $res->fetchOneAssoc();
+ if ($user['origine'] == 'X') {
+ $res = XDB::query("SELECT nom, prenom, promo, FIND_IN_SET(flags, 'femme') AS sexe
+ FROM auth_user_md5
+ WHERE user_id = {?}", $user['uid']);
+ $user = array_merge($user, $res->fetchOneAssoc());
+ }
+ return $user;
} elseif ($dom == 'polytechnique.org' || $dom == 'm4x.org') {
$res = XDB::query(
"SELECT user_id AS uid, u.promo,
@@ -47,7 +54,8 @@ function get_infos($email)
u.prenom, b.alias,
CONCAT(b.alias, '@m4x.org') AS email,
CONCAT(b.alias, '@polytechnique.org') AS email2,
- m.perms='admin' AS perms, m.origine
+ m.perms='admin' AS perms, m.origine,
+ FIND_IN_SET(flags, 'femme') AS sexe
FROM auth_user_md5 AS u
INNER JOIN aliases AS a ON ( u.user_id = a.id AND a.type != 'homonyme' )
INNER JOIN aliases AS b ON ( u.user_id = b.id AND b.type = 'a_vie' )
@@ -82,6 +90,8 @@ class XnetGrpModule extends PLModule
=> $this->make_hook('admin_member', AUTH_MDP),
'%grp/member/new'
=> $this->make_hook('admin_member_new', AUTH_MDP),
+ '%grp/member/new/ajax'
+ => $this->make_hook('admin_member_new_ajax', AUTH_MDP, '', NO_AUTH),
'%grp/member/del'
=> $this->make_hook('admin_member_del', AUTH_MDP),
@@ -308,7 +318,7 @@ class XnetGrpModule extends PLModule
if ($group == 'initiale')
$res = XDB::iterRow(
'SELECT UPPER(SUBSTRING(
- IF(m.origine="X", IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom),
+ IF(m.origine="X", IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom),
1, 1)) as letter, COUNT(*)
FROM groupex.membres AS m
LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid )
@@ -371,16 +381,17 @@ class XnetGrpModule extends PLModule
IF(m.origine='X',u.prenom,m.prenom) AS prenom,
IF(m.origine='X',u.promo,'extérieur') AS promo,
IF(m.origine='X',u.promo,'') AS promo_o,
- IF(m.origine='X',a.alias,m.email) AS email,
+ IF(m.origine='X' AND u.perms != 'pending',a.alias,m.email) AS email,
IF(m.origine='X',FIND_IN_SET('femme', u.flags), m.sexe) AS femme,
m.perms='admin' AS admin,
m.origine='X' AS x,
+ u.perms!='pending' AS inscrit,
m.uid
FROM groupex.membres AS m
LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid )
LEFT JOIN aliases AS a ON ( a.id = m.uid AND a.type='a_vie' )
WHERE m.asso_id = {?} $ini
- AND (m.origine = 'ext' OR u.perms != 'pending')
+ AND (m.origine = 'ext' OR u.perms != 'pending' OR m.email IS NOT NULL)
ORDER BY $tri
LIMIT {?},{?}", $globals->asso('id'), $ofs*NB_PER_PAGE, NB_PER_PAGE);
@@ -652,6 +663,7 @@ class XnetGrpModule extends PLModule
global $globals;
new_groupadmin_page('xnet/groupe/membres-add.tpl');
+ $page->addJsLink('ajax.js');
if (is_null($email)) {
return;
@@ -677,18 +689,67 @@ class XnetGrpModule extends PLModule
}
} else {
if (isvalid_email($email)) {
- $res = XDB::query('SELECT MAX(uid)+1 FROM groupex.membres');
- $uid = max(intval($res->fetchOneCell()), 50001);
- XDB::execute('INSERT INTO groupex.membres (uid,asso_id,origine,email)
- VALUES({?},{?},"ext",{?})', $uid,
- $globals->asso('id'), $email);
- pl_redirect("member/$email");
+ if (Env::v('x') && Env::has('userid') && Env::i('userid')) {
+ $uid = Env::i('userid');
+ $res = XDB::query("SELECT *
+ FROM auth_user_md5
+ WHERE user_id = {?} AND perms = 'pending'", $uid);
+ if ($res->numRows() == 1) {
+ XDB::execute('INSERT INTO groupex.membres (uid, asso_id, origine, email)
+ VALUES ({?}, {?}, "X", {?})',
+ $uid, $globals->asso('id'), $email);
+ if (Env::v('market')) {
+ $res = XDB::query('SELECT COUNT(*)
+ FROM register_marketing
+ WHERE uid={?} AND email={?}', $uid, $email);
+ if (!$res->fetchOneCell()) {
+ XDB::execute("INSERT INTO register_marketing (uid,sender,email,date,last,nb,type,hash)
+ VALUES ({?}, {?}, {?}, NOW(), 0, 0, {?}, '')",
+ $uid, S::v('uid'), $email, Env::v('market_from'));
+ require_once('validations.inc.php');
+ $req = new MarkReq(S::v('uid'), $uid, $email, Env::v('market_from') == 'user');
+ $req->submit();
+ }
+ }
+ pl_redirect("member/$email");
+ }
+ $page->trig("Utilisateur invalide");
+ } else {
+ $res = XDB::query('SELECT MAX(uid)+1 FROM groupex.membres');
+ $uid = max(intval($res->fetchOneCell()), 50001);
+ XDB::execute('INSERT INTO groupex.membres (uid,asso_id,origine,email)
+ VALUES({?},{?},"ext",{?})', $uid,
+ $globals->asso('id'), $email);
+ pl_redirect("member/$email");
+ }
} else {
$page->trig("« $email » n'est pas une adresse mail valide");
}
}
}
+ function handler_admin_member_new_ajax(&$page)
+ {
+ $page->changeTpl('xnet/groupe/membres-new-search.tpl', NO_SKIN);
+ list($nom, $prenom) = str_replace(array('-', ' ', "'"), '%', array(Env::v('nom'), Env::v('prenom')));
+ $where = "perms = 'pending'";
+ if (!empty($nom)) {
+ $where .= " AND nom LIKE '%$nom%'";
+ }
+ if (!empty($prenom)) {
+ $where .= " AND prenom LIKE '%$prenom%'";
+ }
+ if (is_numeric(Env::v('promo'))) {
+ $where .= " AND promo = " . Env::i('promo');
+ }
+ $res = XDB::iterator("SELECT user_id, nom, prenom, promo
+ FROM auth_user_md5
+ WHERE $where");
+ if ($res->total() < 30) {
+ $page->assign("choix", $res);
+ }
+ }
+
function handler_admin_member_del(&$page, $user = null)
{
global $globals;
@@ -813,15 +874,15 @@ class XnetGrpModule extends PLModule
if($state == $ask) continue;
if($ask) {
XDB::query("INSERT INTO virtual_redirect (vid,redirect)
- SELECT vid,{?} FROM virtual WHERE alias={?}",
- $user['email'], $ml);
+ SELECT vid,{?} FROM virtual WHERE alias={?}",
+ $user['email'], $ml);
$page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml");
} else {
XDB::query("DELETE FROM virtual_redirect
- USING virtual_redirect
- INNER JOIN virtual USING(vid)
- WHERE redirect={?} AND alias={?}",
- $user['email'], $ml);
+ USING virtual_redirect
+ INNER JOIN virtual USING(vid)
+ WHERE redirect={?} AND alias={?}",
+ $user['email'], $ml);
$page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml");
}
}
diff --git a/templates/xnet/groupe/announce-edit.tpl b/templates/xnet/groupe/announce-edit.tpl
index 4f1da7a..a452b81 100644
--- a/templates/xnet/groupe/announce-edit.tpl
+++ b/templates/xnet/groupe/announce-edit.tpl
@@ -24,7 +24,7 @@
{literal}
function visibilityChange(box)
{
- var state = (box.checked ? 'none' : 'normal');
+ var state = (box.checked ? 'none' : '');
document.getElementById('promo_titre').style.display = state;
document.getElementById('promo_min').style.display = state;
document.getElementById('promo_max').style.display = state;
diff --git a/templates/xnet/groupe/annuaire.tpl b/templates/xnet/groupe/annuaire.tpl
index c95f304..a99fb63 100644
--- a/templates/xnet/groupe/annuaire.tpl
+++ b/templates/xnet/groupe/annuaire.tpl
@@ -34,13 +34,6 @@ Les membres ext
Tu peux également :
@@ -96,8 +96,12 @@ Tu peux
{if $m.admin}{/if}{if $m.femme}•{/if}{$m.prenom} {$m.nom|strtoupper}{if $m.admin}{/if} |
{if $m.admin}{/if}{$m.promo}{if $m.admin}{/if} |
- {if $m.x}
+ {if $m.inscrit}
+ {elseif $m.x}
+ {icon name=user_suit title="marketing"}
+ {/if}
+ {if $m.inscrit}
{icon name=vcard title="[vcard]"}
{icon name=email title="mail"}
{else}
diff --git a/templates/xnet/groupe/membres-add.tpl b/templates/xnet/groupe/membres-add.tpl
index 7a839eb..9202918 100644
--- a/templates/xnet/groupe/membres-add.tpl
+++ b/templates/xnet/groupe/membres-add.tpl
@@ -20,14 +20,45 @@
{* *}
{**************************************************************************}
+
+
{$asso.nom} : Ajout d'un membre
{* vim:set et sw=2 sts=2 sws=2: *}
diff --git a/templates/xnetevents/edit.tpl b/templates/xnetevents/edit.tpl
index af3b3dc..5cbf9d0 100644
--- a/templates/xnetevents/edit.tpl
+++ b/templates/xnetevents/edit.tpl
@@ -136,7 +136,7 @@ function deadlineChange(box)
|
Paiement :
- |