X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fxnetgrp.php;h=933d6d26e24b083cb11ddba90c73a7c232af82f9;hb=0640ab411285058d9f64e81cbc0ce74cb791aef8;hp=da1292797091eb5c7447181c2ab1bde84eba73fb;hpb=09c8f0ce149bf279767fbb6a7089e69df434dcca;p=platal.git diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index da12927..933d6d2 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -38,6 +38,7 @@ class XnetGrpModule extends PLModule '%grp/annuaire/csv' => $this->make_hook('csv', AUTH_PASSWD, 'groupmember:groupannu'), '%grp/directory/sync' => $this->make_hook('directory_sync', AUTH_PASSWD, 'groupadmin'), '%grp/directory/unact' => $this->make_hook('non_active', AUTH_PASSWD, 'groupadmin'), + '%grp/directory/awact' => $this->make_hook('awaiting_active', AUTH_PASSWD, 'groupadmin'), '%grp/trombi' => $this->make_hook('trombi', AUTH_PASSWD, 'groupannu'), '%grp/geoloc' => $this->make_hook('geoloc', AUTH_PASSWD, 'groupannu'), '%grp/subscribe' => $this->make_hook('subscribe', AUTH_PASSWD, 'groups'), @@ -51,6 +52,7 @@ class XnetGrpModule extends PLModule '%grp/member/new/ajax' => $this->make_hook('admin_member_new_ajax', AUTH_PASSWD, 'groups', NO_AUTH), '%grp/member/del' => $this->make_hook('admin_member_del', AUTH_PASSWD, 'groupadmin'), '%grp/member/suggest' => $this->make_hook('admin_member_suggest', AUTH_PASSWD, 'groupadmin'), + '%grp/member/reg' => $this->make_hook('admin_member_reg', AUTH_PASSWD, 'groupadmin'), '%grp/rss' => $this->make_token_hook('rss', AUTH_PUBLIC), '%grp/announce/new' => $this->make_hook('edit_announce', AUTH_PASSWD, 'groupadmin'), @@ -630,6 +632,68 @@ class XnetGrpModule extends PLModule $page->assign('users', $users); } + private function again($uid) + { + $data = XDB::fetchOneAssoc('SELECT hash, group_name, sender_name, email + FROM register_pending_xnet + WHERE uid = {?}', + $uid); + XDB::execute('UPDATE register_pending_xnet + SET last_date = NOW() + WHERE uid = {?}', + $uid); + + $mailer = new PlMailer('xnet/account.mail.tpl'); + $mailer->addCc('validation+xnet_account@polytechnique.org'); + $mailer->setTo($data['email']); + $mailer->assign('hash', $data['hash']); + $mailer->assign('email', $data['email']); + $mailer->assign('group', $data['group_name']); + $mailer->assign('sender_name', $data['sender_name']); + $mailer->assign('again', true); + $mailer->assign('baseurl', Platal::globals()->xnet->xorg_baseurl); + $mailer->send(); + } + + function handler_awaiting_active($page) + { + global $globals; + $page->changeTpl('xnetgrp/awaiting_active.tpl'); + + XDB::execute('DELETE FROM register_pending_xnet + WHERE DATE_SUB(NOW(), INTERVAL 1 MONTH) > date'); + + $uids = XDB::fetchColumn('SELECT g.uid + FROM group_members AS g + INNER JOIN accounts AS a ON (a.uid = g.uid) + INNER JOIN register_pending_xnet AS p ON (p.uid = g.uid) + WHERE a.uid = g.uid AND g.asso_id = {?} AND a.type = \'xnet\' AND a.state = \'pending\'', + $globals->asso('id')); + + if (Post::has('again')) { + S::assert_xsrf_token(); + + $uids_to_again = array_intersect(array_keys(Post::v('again')), $uids); + foreach ($uids_to_again as $uid) { + $this->again($uid); + } + $page->trigSuccess('Relances effectuées avec succès.'); + } + + $registration_date = XDB::fetchAllAssoc('uid', 'SELECT uid, date + FROM register_pending_xnet + WHERE uid IN {?}', $uids); + $last_date = XDB::fetchAllAssoc('uid', 'SELECT uid, last_date + FROM register_pending_xnet + WHERE uid IN {?}', $uids); + + $users = User::getBulkUsersWithUIDs($uids); + $page->assign('users', $users); + $page->assign('registration_date', $registration_date); + $page->assign('last_date', $last_date); + + } + private function removeSubscriptionRequest($uid) { global $globals; @@ -881,6 +945,7 @@ class XnetGrpModule extends PLModule global $globals; $page->changeTpl('xnetgrp/membres-add.tpl'); + $page->addJsLink('xnet_members.js'); if (is_null($email)) { return; @@ -909,16 +974,20 @@ class XnetGrpModule extends PLModule XDB::query('UPDATE accounts SET email = {?} WHERE uid = {?} AND email IS NULL', - Post::t('email'), $user->id()); + $email, $user->id()); // Add email for marketing if required. - if (Env::v('market')) { + if (Env::v('marketing')) { $market = Marketing::get($user->uid, $email); if (!$market) { $market = new Marketing($user->uid, $email, 'group', $globals->asso('nom'), - Env::v('market_from'), S::v('uid')); + Env::v('marketing_from'), S::v('uid')); $market->add(); } } + } elseif (Env::v('broken')) { + // Add email for broken if required. + $valid = new BrokenReq(S::user(), $user, $email, 'Groupe : ' . $globals->asso('nom')); + $valid->submit(); } } else { $user = User::getSilent($email); @@ -1042,20 +1111,34 @@ class XnetGrpModule extends PLModule $page->assign('hruid', $hruid); } + function handler_admin_member_reg($page, $uid) + { + pl_content_headers('text/plain'); + + $user = User::getSilentWithUID($uid); + if ($user && $user->state != 'pending' && $user->hasProfile()) { + echo true; + } + echo false; + exit(); + } + function handler_admin_member_new_ajax($page) { pl_content_headers("text/html"); $page->changeTpl('xnetgrp/membres-new-search.tpl', NO_SKIN); $users = array(); + $same_email = false; if (Env::has('login')) { $user = User::getSilent(Env::t('login')); if ($user && $user->state != 'pending') { - $users = array($user); + $users = array($user->id() => $user); + $same_email = true; } } if (empty($users)) { list($lastname, $firstname) = str_replace(array('-', ' ', "'"), '%', array(Env::t('nom'), Env::t('prenom'))); - $cond = new PFC_And(new PFC_Not(new UFC_Registered())); + $cond = new PFC_And(); if (!empty($lastname)) { $cond->addChild(new UFC_NameTokens($lastname, array(), false, false, Profile::LASTNAME)); } @@ -1072,7 +1155,9 @@ class XnetGrpModule extends PLModule $users = array(); } } + $page->assign('users', $users); + $page->assign('same_email', $same_email); } function unsubscribe(PlUser $user, $remember = false) @@ -1195,7 +1280,7 @@ class XnetGrpModule extends PLModule } } - private function changeLogin(PlPage $page, PlUser $user, $login) + private function changeLogin(PlPage $page, PlUser $user, $login, $req_broken = false, $req_marketing = false, $marketing_from = 'user') { // Search the user's uid. $xuser = User::getSilent($login); @@ -1215,6 +1300,19 @@ class XnetGrpModule extends PLModule return false; } + // Market or suggest new redirection if required. + $email = $user->bestEmail(); + if ($req_broken) { + $valid = new BrokenReq(S::user(), $xuser, $email, 'Groupe : ' . Platal::globals()->asso('nom')); + $valid->submit(); + } elseif ($req_marketing) { + $market = Marketing::get($xuser->uid, $email); + if (!$market) { + $market = new Marketing($xuser->uid, $email, 'group', Platal::globals()->asso('nom'), $marketing_from, S::i('uid')); + $market->add(); + } + } + if ($user->mergeIn($xuser)) { return $xuser->login(); } @@ -1235,6 +1333,7 @@ class XnetGrpModule extends PLModule } $page->changeTpl('xnetgrp/membres-edit.tpl'); + $page->addJsLink('xnet_members.js'); $mmlist = new MMList(S::user(), $globals->asso('mail_domain')); @@ -1244,8 +1343,8 @@ class XnetGrpModule extends PLModule require_once 'name.func.inc.php'; // Convert user status to X - if (!Post::blank('login_X')) { - $forlife = $this->changeLogin($page, $user, Post::t('login_X')); + if (!Post::blank('x')) { + $forlife = $this->changeLogin($page, $user, Post::i('userid'), Post::b('broken'), Post::b('marketing'), Post::v('marketing_from')); if ($forlife) { pl_redirect('member/' . $forlife); } @@ -1273,14 +1372,18 @@ class XnetGrpModule extends PLModule // Updates email. $new_email = strtolower(Post::t('email')); - if (!$user->perms && require_email_update($user, $new_email)) { + if (($user->type == 'virtual' || ($user->type == 'xnet' && !$user->perms)) + && require_email_update($user, $new_email)) { XDB::query('UPDATE accounts SET email = {?} WHERE uid = {?}', $new_email, $user->id()); - $listClient = new MMList(S::user()); - $listClient->change_user_email($user->forlifeEmail(), $new_email); - update_alias_user($user->forlifeEmail(), $new_email); + if ($user->forlifeEmail()) { + $listClient = new MMList(S::user()); + $listClient->change_user_email($user->forlifeEmail(), $new_email); + update_alias_user($user->forlifeEmail(), $new_email); + } + $user = User::getWithUID($user->id()); } if (XDB::affectedRows()) { $page->trigSuccess('Données de l\'utilisateur mises à jour.'); @@ -1293,20 +1396,7 @@ class XnetGrpModule extends PLModule $page->trigSuccess('Le compte va bientôt être activé.'); } if (Post::b('again')) { - $data = XDB::fetchOneAssoc('SELECT hash, group_name, sender_name, email - FROM register_pending_xnet - WHERE uid = {?}', - $user->id()); - - $mailer = new PlMailer('xnet/account.mail.tpl'); - $mailer->addCc('validation+xnet_account@polytechnique.org'); - $mailer->setTo($data['email']); - $mailer->assign('hash', $data['hash']); - $mailer->assign('email', $data['email']); - $mailer->assign('group', $data['group_name']); - $mailer->assign('sender_name', $data['sender_name']); - $mailer->assign('again', true); - $mailer->send(); + $this->again($user->id()); $page->trigSuccess('Relance effectuée avec succès.'); } }