--- /dev/null
+/***************************************************************************
+ * 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:
'%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'),
global $globals;
$page->changeTpl('xnetgrp/membres-add.tpl');
+ $page->addJsLink('xnet_members.js');
if (is_null($email)) {
return;
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);
$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));
}
$users = array();
}
}
+
$page->assign('users', $users);
+ $page->assign('same_email', $same_email);
}
function unsubscribe(PlUser $user, $remember = false)
}
}
- 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);
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();
}
}
$page->changeTpl('xnetgrp/membres-edit.tpl');
+ $page->addJsLink('xnet_members.js');
$mmlist = new MMList(S::user(), $globals->asso('mail_domain'));
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);
}
--- /dev/null
+{**************************************************************************}
+{* *}
+{* 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 *}
+{* *}
+{**************************************************************************}
+
+<tr>
+ <td colspan="2">
+ <input type="checkbox" id="x" name="x" onchange="xStateChange(this, '{$platal->ns}');" />
+ <label for="x">Coche cette case s'il s'agit d'un X ou un master ou doctorant de l'X non inscrit à Polytechnique.org.</label>
+ </td>
+</tr>
+<tr class="details" style="display: none">
+ <td class="titre">Nom :</td>
+ <td><input type="text" id="nom" name="nom" size="20" value="" onkeyup="searchX('{$platal->ns}');" /></td>
+</tr>
+<tr class="details" style="display: none">
+ <td class="titre">Prénom :</td>
+ <td><input type="text" id="prenom" name="prenom" size="20" value="" onkeyup="searchX('{$platal->ns}');" /></td>
+</tr>
+<tr class="details" style="display: none">
+ <td class="titre">Promotion :</td>
+ <td><input type="text" id="promo" name="promo" size="4" value="" onkeyup="searchX('{$platal->ns}');" /> <small>(X2004)</small></td>
+</tr>
+<tr class="details pair" style="display: none">
+ <td colspan="2" id="search_result">
+ {include file="xnetgrp/membres-new-search.tpl"}
+ </td>
+</tr>
+
+{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
{* *}
{**************************************************************************}
-<script type="text/javascript">//<![CDATA[
-{literal}
-function xStateChange(box)
-{
- var state = (box.checked ? '' : 'none');
- document.getElementById('xnom').style.display = state;
- document.getElementById('xprenom').style.display = state;
- document.getElementById('xpromo').style.display = state;
- document.getElementById('xsearch').style.display = state;
- $('#search_result').updateHtml('{/literal}{$platal->ns}{literal}member/new/ajax?login='
- + $('#email').val());
-}
-
-var nom;
-var prenom;
-var promo;
-function searchX()
-{
- if (document.getElementById('nom').value == nom
- && document.getElementById('prenom').value == prenom
- && document.getElementById('promo').value == promo) {
- return;
- }
- var nom = document.getElementById('nom').value;
- var prenom = document.getElementById('prenom').value;
- var promo = document.getElementById('promo').value;
- $('#search_result').updateHtml('{/literal}{$platal->ns}{literal}member/new/ajax?prenom=' + prenom + '&nom=' + nom + '&promo=' + promo);
-}
-{/literal}
-//]]></script>
-
<h1>{$asso->nom} : Ajout d'un membre</h1>
<form method="post" action="{$platal->ns}member/new/">
onclick='this.form.action += this.form.email.value' />
</td>
</tr>
- <tr>
- <td colspan="2">
- <input type="checkbox" id="x" name="x" onchange="xStateChange(this);" />
- {* TODO: adapts text for masters and doctorates when required. *}
- <label for="x">Coche cette case s'il s'agit d'un X ou un master ou doctorant de l'X non inscrit à Polytechnique.org.</label>
- </td>
- </tr>
- <tr id="xnom" style="display: none">
- <td class="titre">Nom :</td>
- <td><input type="text" id="nom" name="nom" size="20" value="" onkeyup="searchX();" /></td>
- </tr>
- <tr id="xprenom" style="display: none">
- <td class="titre">Prénom :</td>
- <td><input type="text" id="prenom" name="prenom" size="20" value="" onkeyup="searchX();" /></td>
- </tr>
- <tr id="xpromo" style="display: none">
- <td class="titre">Promotion :</td>
- {* TODO: add examples for masters and doctorates when required. *}
- <td><input type="text" id="promo" name="promo" size="4" value="" onkeyup="searchX();" /> <small>(X2004)</small></td>
- </tr>
- <tr id="xsearch" style="display: none" class="pair">
- <td colspan="2" id="search_result">
- {include file="xnetgrp/membres-new-search.tpl"}
- </td>
- </tr>
+ {include file="xnetgrp/members_new_form.tpl" registered=false}
</table>
</form>
-
{literal}
<script type="text/javascript">
$("#email").focus();
var state = (box.value != 'virtual') ? '' : 'none';
document.getElementById('prenom').style.display = state;
document.getElementById('sexe').style.display = state;
- document.getElementById('make_X').style.display = state;
document.getElementById('password').style.display = state;
}
-
- function showXInput(box)
- {
- if (box.checked) {
- document.getElementById('make_X_cb').style.display = 'none';
- document.getElementById('make_X_login').style.display = '';
- }
- }
{/literal}
</script>
</tr>
{/if}
{if $user->type eq 'xnet'}
- <tr id="make_X">
- <td colspan="2">
- <span id="make_X_cb">
- <input type="checkbox" name="is_x" id="is_x" onclick="showXInput(this);" onchange="showXInput(this);" />
- <label for="is_x">coche cette case s'il s'agit d'un X ou un master ou doctorant de l'X</label>
- </span>
- <span id="make_X_login" style="display: none">
- <span class="titre">Identifiant (prenom.nom.promo) :</span>
- <input type="text" name="login_X" value="" />
- </span>
- </td>
- </tr>
+ {include file="xnetgrp/members_new_form.tpl" registered=true}
{/if}
{if $user->type eq 'xnet' && $suggest}
<tr>
{* *}
{**************************************************************************}
- {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 :
- <select name="userid" onchange="document.getElementById('marketing').style.display = (this.value == 0 ? 'none' : '')">
- <option value="0"> </option>
- {foreach item=user from=$users}
- <option value="{$user->id()}" {if $users|@count == 1}selected="selected"{/if}>{profile user=$user link=false promo=true}</option>
- {/foreach}
+{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 :
+<select name="userid" onchange="updateSuggestions('{$platal->ns}', this.value)">
+ <option value="0" {if $users|@count neq 1}selected="selected"{/if}> </option>
+ {foreach item=user from=$users}
+ <option value="{$user->id()}" {if $users|@count == 1}selected="selected"{/if}>{profile user=$user link=false promo=true}</option>
+ {/foreach}
+</select>
+{if !$same_email}
+<span id="marketing" style="display: none"><br />
+ <label>
+ <input type="checkbox" name="marketing" onchange="$('#marketing_from').toggle()" />
+ Lui envoyer un marketing
+ </label>
+ <select name="marketing_from" id="marketing_from">
+ <option value="user" selected="selected">de ta part.</option>
+ <option value="staff">de la part de Polytechnique.org.</option>
</select>
- <span id="marketing" {if $users|@count != 1}style="display: none"{/if}><br />
- <label><input type="checkbox" name="market" checked="checked"
- onchange="document.getElementById('from').style.display = (this.checked ? '' : 'none')"/>
- Lui envoyer un marketing</label>
- <select name="market_from" id="from">
- <option value="user" selected="selected">de ta part.</option>
- <option value="staff">de la part de Polytechnique.org.</option>
- </select>
- </span>
- {/if}
+</span>
+<span id="broken" style="display: none"><br />
+ Ce camarade est inscrit, mais l'email fourni ne fait pas partie de ses adresses de redirection.<br />
+ <label>
+ <input type="checkbox" name="broken" />
+ Lui suggérer d'ajouter cette adresse email à ses redirections.
+ </label>
+</span>
+{/if}
+{/if}
{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}