From 8773c4c2e14fb49bed688427594cbbf825907970 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Sun, 4 Dec 2011 23:53:08 +0100 Subject: [PATCH] Imrpoves group's X finder, and use it for merging accounts. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- htdocs/javascript/xnet_members.js | 61 ++++++++++++++++++++++++++++++++ modules/xnetgrp.php | 52 ++++++++++++++++++++++----- templates/xnetgrp/members_new_form.tpl | 47 ++++++++++++++++++++++++ templates/xnetgrp/membres-add.tpl | 58 +----------------------------- templates/xnetgrp/membres-edit.tpl | 22 +----------- templates/xnetgrp/membres-new-search.tpl | 52 ++++++++++++++++----------- 6 files changed, 185 insertions(+), 107 deletions(-) create mode 100644 htdocs/javascript/xnet_members.js create mode 100644 templates/xnetgrp/members_new_form.tpl diff --git a/htdocs/javascript/xnet_members.js b/htdocs/javascript/xnet_members.js new file mode 100644 index 0000000..3f8999b --- /dev/null +++ b/htdocs/javascript/xnet_members.js @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (C) 2003-2011 Polytechnique.org * + * http://opensource.polytechnique.org/ * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + ***************************************************************************/ + +function xStateChange(box, baseurl) +{ + $('.details').toggle(); + $('#search_result').updateHtml(baseurl + 'member/new/ajax?login=' + $('#email').val()); +} + +var nom; +var prenom; +var promo; +function searchX(baseurl) +{ + if ($('#nom').val() == nom && $('#prenom').val() == prenom && $('#promo').val() == promo) { + return; + } + nom = $('#nom').val(); + prenom = $('#prenom').val(); + promo = $('#promo').val(); + $('#search_result').updateHtml(baseurl + 'member/new/ajax?prenom=' + prenom + '&nom=' + nom + '&promo=' + promo, + function (data) { + updateSuggestions(baseurl, $('select:[name=userid]').val()); + }); +} + +function updateSuggestions(baseurl, uid) +{ + $('#broken').hide(); + $('#marketing').hide(); + if (uid && uid != 0) { + $.xget(baseurl + 'member/reg/' + uid, function(data) { + if (data) { + $('#broken').show(); + $('#broken').find('[name=broken]').attr('checked', 'checked'); + } else { + $('#marketing').show(); + $('#marketing').find('[name=marketing]').attr('checked', 'checked'); + } + }); + } +} + +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index 812836e..4fccb1b 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -51,6 +51,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'), @@ -881,6 +882,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 +911,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 +1048,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 +1092,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 +1217,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 +1237,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 +1270,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 +1280,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); } diff --git a/templates/xnetgrp/members_new_form.tpl b/templates/xnetgrp/members_new_form.tpl new file mode 100644 index 0000000..2776c85 --- /dev/null +++ b/templates/xnetgrp/members_new_form.tpl @@ -0,0 +1,47 @@ +{**************************************************************************} +{* *} +{* Copyright (C) 2003-2011 Polytechnique.org *} +{* http://opensource.polytechnique.org/ *} +{* *} +{* This program is free software; you can redistribute it and/or modify *} +{* it under the terms of the GNU General Public License as published by *} +{* the Free Software Foundation; either version 2 of the License, or *} +{* (at your option) any later version. *} +{* *} +{* This program is distributed in the hope that it will be useful, *} +{* but WITHOUT ANY WARRANTY; without even the implied warranty of *} +{* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *} +{* GNU General Public License for more details. *} +{* *} +{* You should have received a copy of the GNU General Public License *} +{* along with this program; if not, write to the Free Software *} +{* Foundation, Inc., *} +{* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *} +{* *} +{**************************************************************************} + + + + + + + + + Nom : + + + + Prénom : + + + + Promotion : + (X2004) + + + + {include file="xnetgrp/membres-new-search.tpl"} + + + +{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *} diff --git a/templates/xnetgrp/membres-add.tpl b/templates/xnetgrp/membres-add.tpl index 43f52a7..1e2ee24 100644 --- a/templates/xnetgrp/membres-add.tpl +++ b/templates/xnetgrp/membres-add.tpl @@ -20,37 +20,6 @@ {* *} {**************************************************************************} - -

{$asso->nom} : Ajout d'un membre

@@ -77,34 +46,9 @@ function searchX() onclick='this.form.action += this.form.email.value' /> - - - - {* TODO: adapts text for masters and doctorates when required. *} - - - - - Nom : - - - - Prénom : - - - - Promotion : - {* TODO: add examples for masters and doctorates when required. *} - (X2004) - - - - {include file="xnetgrp/membres-new-search.tpl"} - - + {include file="xnetgrp/members_new_form.tpl" registered=false}
- {literal} @@ -194,18 +185,7 @@ {/if} {if $user->type eq 'xnet'} - - - - - - - - - + {include file="xnetgrp/members_new_form.tpl" registered=true} {/if} {if $user->type eq 'xnet' && $suggest} diff --git a/templates/xnetgrp/membres-new-search.tpl b/templates/xnetgrp/membres-new-search.tpl index 8b70729..9c3b5b6 100644 --- a/templates/xnetgrp/membres-new-search.tpl +++ b/templates/xnetgrp/membres-new-search.tpl @@ -20,27 +20,37 @@ {* *} {**************************************************************************} - {if t($too_many)} - Les critères de recherche ne sont pas assez précis. - {elseif !t($users) || $users|@count eq 0} - Aucun camarade non-inscrit ne correspond aux informations fournies. - {else} - Camarades correspondants : - + + {foreach item=user from=$users} + + {/foreach} + +{if !$same_email} + + +{/if} +{/if} {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *} -- 2.1.4