check("select uid from adresses where pub != 'private' and pub !='ax' and pub != 'public'", "Utiliseur n'ayant pas de flag de publicite pour une adresse");
check("select uid from tels where tel_pub != 'private' and tel_pub !='ax' and tel_pub != 'public'", "Utiliseur n'ayant pas de flag de publicite pour un numero de telephone");
+/* validite des hruid */
+check("SELECT user_id, nom, prenom, promo FROM auth_user_md5 WHERE hruid IS NULL OR hruid = ''",
+ "Utilisateur n'ayant pas de hruid.");
+
/* validite de aliases */
check("SELECT a.*
FROM aliases AS a
* Check dead emails
*/
if ($panne_level > 0) {
- $sql = "SELECT e.email, a.alias AS forlife
+ $sql = "SELECT e.email, u.hruid
FROM emails AS e
- INNER JOIN aliases AS a ON a.id = e.uid AND a.type = 'a_vie'
+ INNER JOIN auth_user_md5 AS u ON u.user_id = e.uid
WHERE e.panne_level = $panne_level AND e.flags = 'active'
- ORDER BY a.alias";
+ ORDER BY u.hruid";
$res = Xdb::query($sql);
if ($res->numRows()) {
$result = $res->fetchAllAssoc();
echo "Nouvelles adresses en panne detectees :\n";
foreach ($result as $assoc) {
- echo '* ' . $assoc['email'] . ' pour ' . $assoc['forlife'] . "\n";
+ echo '* ' . $assoc['email'] . ' pour ' . $assoc['hruid'] . "\n";
}
echo "\n\n";
* Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
-/* vim: set sw=4 ts=4 sts=4 tw=100:
+/**
* crée des demandes de validation pour les kill d'alias
* une demande 10 jours avant pour un warning, puis une autre pour le robot
-*/
+ */
-$W_PERIOD = "INTERVAL 7 DAY"; // temps d'envoi du warning avant la deadline
+require('connect.db.inc.php');
+require_once('validations/homonymes.inc.php');
-require('./connect.db.inc.php');
+$resRobot = XDB::iterator(
+ "SELECT id, alias, expire
+ FROM aliases
+ WHERE (expire = NOW() + INTERVAL 7 DAY OR expire <= NOW())
+ AND type = 'alias'");
+while ($old = $resRobot->next()) {
+ $res = XDB::query(
+ "SELECT u.hruid
+ FROM homonymes AS h
+ INNER JOIN auth_user_md5 AS u USING (user_id)
+ WHERE homonyme_id = {?}",
+ $old['id']);
+ $hruids = $res->fetchColumn();
-$resRobot = XDB::iterator("SELECT id, alias, expire FROM aliases WHERE (expire = NOW() + $W_PERIOD OR expire <= NOW()) AND type = 'alias'");
-
-if ($resRobot->total()) {
- require_once('validations/homonymes.inc.php');
- while ($old = $resRobot->next()) {
- $res = XDB::query("SELECT alias AS forlife FROM homonymes INNER JOIN aliases ON(user_id = id) WHERE homonyme_id = {?} AND type='a_vie'", $old['id']);
- $forlifes = $res->fetchColumn();
- $req = new HomonymeReq($old['id'], $old['alias'], $forlifes, $old['expire'] > date("Y-m-d"));
- $req->submit();
- }
+ $homonyme = User::getSilent($old['id']);
+ $req = new HomonymeReq($homonyme, $old['alias'], $hruids, $old['expire'] > date("Y-m-d"));
+ $req->submit();
}
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
#!/usr/bin/php5 -q
<?php
-require('./connect.db.inc.php');
+require('connect.db.inc.php');
$MESSAGE = '';
// ---------------------------------------
// ---------------------------------------
$res = XDB::iterRow(
- "SELECT forlife, email, date
- FROM register_pending
- WHERE hash != 'INSCRIT'
- ORDER BY date");
+ "SELECT u.hruid, r.email, r.date
+ FROM register_pending AS r
+ LEFT JOIN auth_user_md5 AS u ON (u.user_id = r.uid)
+ WHERE r.hash != 'INSCRIT'
+ ORDER BY r.date");
if ($b = $res->total()) {
$MESSAGE.="\n$b INSCRIPTIONS NON CONFIRMEES:\n";
while (list($usern, $mail, $quand) = $res->next()) {
$res = XDB::query('SELECT COUNT(DISTINCT uid), COUNT(*) FROM register_marketing');
list($a, $b) = $res->fetchOneRow();
-$MESSAGE .= "\n$c INSCRIPTIONS SOLICITÉES :\n";
+$MESSAGE .= "\nINSCRIPTIONS SOLICITÉES :\n";
$MESSAGE .= " $a utilisateurs\n $b adresses email\n";
// ---------------------------------------
$MESSAGE .= "\n\n";
-require_once('../../classes/plmailer.php');
$mailer = new PlMailer();
$mailer->setSubject("$a confirmées, $b en attente et $c sollicitées");
$mailer->setFrom($globals->register->notif);
exit;
}
+// Retrieves list parameters.
$promo = intval($opt['p']);
$owner = $opt['o'];
-$req = new ListeReq(0, false, "promo$promo", $globals->mail->domain, "Liste de la promotion $promo",
+$owner_user = User::getSilent($owner);
+if (!$owner_user) {
+ echo "Supplied owner is not valid, aborting.\n";
+ exit 1;
+}
+
+// Creates the list.
+$req = new ListeReq($owner_user, false, "promo$promo", $globals->mail->domain, "Liste de la promotion $promo",
1 /*private*/, 2 /*moderate*/, 0 /*free subscription*/,
array($owner), array());
$req->submit();
--- /dev/null
+<?php
+/***************************************************************************
+ * Copyright (C) 2003-2008 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 *
+ ***************************************************************************/
+
+class User extends PlUser
+{
+ // Implementation of the login to uid method.
+ protected function getLogin($login)
+ {
+ global $globals;
+
+ // If $data is an integer, fetches directly the result.
+ if (is_numeric($login)) {
+ $res = XDB::query("SELECT user_id FROM auth_user_md5 WHERE user_id = {?}", $login);
+ if ($res->numRows()) {
+ return $res->fetchOneCell();
+ }
+
+ throw new UserNotFoundException();
+ }
+
+ // Checks whether $login is a valid hruid or not.
+ $res = XDB::query("SELECT user_id FROM auth_user_md5 WHERE hruid = {?}", $login);
+ if ($res->numRows()) {
+ return $res->fetchOneCell();
+ }
+
+ // From now, $login can only by an email alias, or an email redirection.
+ // If it doesn't look like a valid address, appends the plat/al's main domain.
+ $login = trim(strtolower($login));
+ if (strstr($login, '@') === false) {
+ $login = $login . '@' . $globals->mail->domain;
+ }
+
+ // Checks if $login is a valid alias on the main domains.
+ list($mbox, $fqdn) = explode('@', $login);
+ if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) {
+ $res = XDB::query("SELECT u.user_id
+ FROM auth_user_md5 AS u
+ INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type IN ('alias', 'a_vie'))
+ WHERE a.alias = {?}", $mbox);
+ if ($res->numRows()) {
+ return $res->fetchOneCell();
+ }
+
+ if (preg_match('/^(.*)\.([0-9]{4})$/u', $mbox, $matches)) {
+ $res = XDB::query("SELECT u.user_id
+ FROM auth_user_md5 AS u
+ INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type IN ('alias', 'a_vie'))
+ WHERE a.alias = {?} AND u.promo = {?}", $matches[1], $matches[2]);
+ if ($res->numRows() == 1) {
+ return $res->fetchOneCell();
+ }
+ }
+
+ throw new UserNotFoundException();
+ }
+
+ // Looks for $login as an email alias from the dedicated alias domain.
+ if ($fqdn == $globals->mail->alias_dom || $fqdn == $globals->mail->alias_dom2) {
+ $res = XDB::query("SELECT redirect
+ FROM virtual_redirect
+ INNER JOIN virtual USING(vid)
+ WHERE alias = {?}", $mbox . '@' . $globals->mail->alias_dom);
+ if ($redir = $res->fetchOneCell()) {
+ // We now have a valid alias, which has to be translated to an hruid.
+ list($alias, $alias_fqdn) = explode('@', $redir);
+ $res = XDB::query("SELECT u.user_id
+ FROM auth_user_md5 AS u
+ LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type IN ('alias', 'a_vie'))
+ WHERE a.alias = {?}", $alias);
+ if ($res->numRows()) {
+ return $res->fetchOneCell();
+ }
+ }
+
+ throw new UserNotFoundException();
+ }
+
+ // Otherwise, we do suppose $login is an email redirection.
+ $res = XDB::query("SELECT u.user_id
+ FROM auth_user_md5 AS u
+ LEFT JOIN emails AS e ON (e.uid = u.user_id)
+ WHERE e.email = {?}", $login);
+ if ($res->numRows() == 1) {
+ return $res->fetchOneCell();
+ }
+
+ throw new UserNotFoundException($res->fetchColumn(1));
+ }
+
+ // Implementation of the data loader.
+ protected function loadMainFields()
+ {
+ if ($this->hruid !== null && $this->forlife !== null
+ && $this->bestalias !== null && $this->display_name !== null
+ && $this->full_name !== null && $this->promo !== null && $this->perms !== null
+ && $this->gender !== null && $this->email_format !== null) {
+ return;
+ }
+
+ global $globals;
+ $res = XDB::query("SELECT u.hruid, u.promo,
+ CONCAT(af.alias, '@{$globals->mail->domain}') AS forlife,
+ CONCAT(ab.alias, '@{$globals->mail->domain}') AS bestalias,
+ CONCAT(u.prenom, ' ', IF(u.nom_usage <> '', u.nom_usage, u.nom)) AS full_name,
+ IF(u.prenom != '', u.prenom, u.nom) AS display_name,
+ FIND_IN_SET('femme', u.flags) AS gender,
+ q.core_mail_fmt AS email_format,
+ u.perms
+ FROM auth_user_md5 AS u
+ LEFT JOIN auth_user_quick AS q ON (q.user_id = u.user_id)
+ LEFT JOIN aliases AS af ON (af.id = u.user_id AND af.type = 'a_vie')
+ LEFT JOIN aliases AS ab ON (ab.id = u.user_id AND FIND_IN_SET('bestalias', ab.flags))
+ WHERE u.user_id = {?}", $this->user_id);
+ $this->fillFromArray($res->fetchOneAssoc());
+ }
+
+ // Specialization of the fillFromArray method, to implement hacks to enable
+ // lazy loading of user's main properties from the session.
+ // TODO(vzanotti): remove the conversion hacks once the old codebase will
+ // stop being used actively.
+ protected function fillFromArray(array $values)
+ {
+ // It might happen that the 'user_id' field is called uid in some places
+ // (eg. in sessions), so we hard link uid to user_id to prevent useless
+ // SQL requests.
+ if (!isset($values['user_id']) && isset($values['uid'])) {
+ $values['user_id'] = $values['uid'];
+ }
+
+ // Also, if display_name and full_name are not known, but the user's
+ // surname and last name are, we can construct the former two.
+ if (isset($values['prenom']) && isset($values['nom'])) {
+ if (!isset($values['display_name'])) {
+ $values['display_name'] = ($values['prenom'] ? $values['prenom'] : $values['nom']);
+ }
+ if (!isset($values['full_name'])) {
+ $values['full_name'] = $values['prenom'] . ' ' . $values['nom'];
+ }
+ }
+
+ // We also need to convert the gender (usually named "femme"), and the
+ // email format parameter (valued "texte" instead of "text").
+ if (isset($values['femme'])) {
+ $values['gender'] = (bool) $values['femme'];
+ }
+ if (isset($values['mail_fmt'])) {
+ $values['email_format'] = $values['mail_fmt'];
+ }
+ if (isset($values['email_format'])) {
+ $values['email_format'] = ($values['email_format'] ? self::FORMAT_HTML : self::FORMAT_TEXT);
+ }
+
+ parent::fillFromArray($values);
+ }
+
+ // Specialization of the buildPerms method
+ // This function build 'generic' permissions for the user. It does not take
+ // into account page specific permissions (e.g X.net group permissions)
+ protected function buildPerms()
+ {
+ if (!is_null($this->perm_flags)) {
+ return;
+ }
+ if ($this->perms === null) {
+ $this->loadMainFields();
+ }
+ $this->perm_flags = self::makePerms($this->perms);
+ }
+
+ // Return permission flags for a given permission level.
+ public static function makePerms($perms)
+ {
+ $flags = new PlFlagSet();
+ if (is_null($flags) || $perms == 'disabled' || $perms == 'ext') {
+ return $flags;
+ }
+ $flags->addFlag(PERMS_USER);
+ if ($perms == 'admin') {
+ $flags->addFlag(PERMS_ADMIN);
+ }
+ return $flags;
+ }
+
+ // Implementation of the default user callback.
+ public static function _default_user_callback($login, $results)
+ {
+ $result_count = count($results);
+ if ($result_count == 0 || !S::has_perms()) {
+ Platal::page()->trigError("Il n'y a pas d'utilisateur avec l'identifiant : $login");
+ } else {
+ Platal::page()->trigError("Il y a $result_count utilisateurs avec cet identifiant : " . join(', ', $results));
+ }
+ }
+
+ // Implementation of the static email locality checker.
+ public static function isForeignEmailAddress($email)
+ {
+ global $globals;
+ if (strpos($email, '@') === false) {
+ return false;
+ }
+
+ list($user, $dom) = explode('@', $email);
+ return $dom != $globals->mail->domain &&
+ $dom != $globals->mail->domain2 &&
+ $dom != $globals->mail->alias_dom &&
+ $dom != $globals->mail->alias_dom2;
+ }
+}
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>
if ($level == -1) {
S::set('auth', AUTH_MDP);
}
- $res = XDB::query('SELECT u.user_id AS uid, prenom, nom, perms, promo, password, FIND_IN_SET(\'femme\', u.flags) AS femme,
- a.alias AS forlife, a2.alias AS bestalias, q.core_mail_fmt AS mail_fmt, q.core_rss_hash
+ $res = XDB::query("SELECT u.user_id AS uid, u.hruid, prenom, nom, perms, promo, password, FIND_IN_SET('femme', u.flags) AS femme,
+ CONCAT(a.alias, '@{$globals->mail->domain}') AS forlife,
+ CONCAT(a2.alias, '@{$globals->mail->domain}') AS bestalias,
+ q.core_mail_fmt AS mail_fmt, q.core_rss_hash
FROM auth_user_md5 AS u
INNER JOIN auth_user_quick AS q USING(user_id)
- INNER JOIN aliases AS a ON (u.user_id = a.id AND a.type = \'a_vie\')
- INNER JOIN aliases AS a2 ON (u.user_id = a2.id AND FIND_IN_SET(\'bestalias\', a2.flags))
- WHERE u.user_id = {?} AND u.perms IN(\'admin\', \'user\')
- LIMIT 1', $user);
+ INNER JOIN aliases AS a ON (u.user_id = a.id AND a.type = 'a_vie')
+ INNER JOIN aliases AS a2 ON (u.user_id = a2.id AND FIND_IN_SET('bestalias', a2.flags))
+ WHERE u.user_id = {?} AND u.perms IN('admin', 'user')
+ LIMIT 1", $user);
$sess = $res->fetchOneAssoc();
$perms = $sess['perms'];
unset($sess['perms']);
$_SESSION = array_merge($_SESSION, $sess);
- $this->makePerms($perms);
+ S::set('perms', User::makePerms($perms));
S::kill('challenge');
S::kill('loginX');
S::kill('may_update');
if (!$this->startSUID(S::i('uid'))) {
return false;
}
- $this->makePerms('user');
+ S::set('perms', User::makePerms('user'));
return true;
}
*/
if (S::has('suid')) {
$suid = S::v('suid');
- $login = $uname = $suid['forlife'];
+ $login = $uname = $suid['hruid'];
$redirect = false;
} else {
$uname = Env::v('username');
unset($_SESSION['log']);
// Retrieves main user properties.
- $res = XDB::query('SELECT u.user_id AS uid, prenom, prenom_ini, nom, nom_ini, nom_usage, perms, promo, promo_sortie,
- matricule, password, FIND_IN_SET(\'femme\', u.flags) AS femme,
- a.alias AS forlife, a2.alias AS bestalias,
+ global $globals;
+ $res = XDB::query("SELECT u.user_id AS uid, u.hruid, prenom, prenom_ini, nom, nom_ini, nom_usage, perms, promo, promo_sortie,
+ matricule, password, FIND_IN_SET('femme', u.flags) AS femme,
+ CONCAT(a.alias, '@{$globals->mail->domain}') AS forlife,
+ CONCAT(a2.alias, '@{$globals->mail->domain}') AS bestalias,
q.core_mail_fmt AS mail_fmt, UNIX_TIMESTAMP(q.banana_last) AS banana_last, q.watch_last, q.core_rss_hash,
- FIND_IN_SET(\'watch\', u.flags) AS watch_account, q.last_version, g.g_account_name IS NOT NULL AS googleapps
+ FIND_IN_SET('watch', u.flags) AS watch_account, q.last_version, g.g_account_name IS NOT NULL AS googleapps
FROM auth_user_md5 AS u
INNER JOIN auth_user_quick AS q USING(user_id)
- INNER JOIN aliases AS a ON (u.user_id = a.id AND a.type = \'a_vie\')
- INNER JOIN aliases AS a2 ON (u.user_id = a2.id AND FIND_IN_SET(\'bestalias\', a2.flags))
- LEFT JOIN gapps_accounts AS g ON (u.user_id = g.l_userid AND g.g_status = \'active\')
- WHERE u.user_id = {?} AND u.perms IN(\'admin\', \'user\')', $uid);
+ INNER JOIN aliases AS a ON (u.user_id = a.id AND a.type = 'a_vie')
+ INNER JOIN aliases AS a2 ON (u.user_id = a2.id AND FIND_IN_SET('bestalias', a2.flags))
+ LEFT JOIN gapps_accounts AS g ON (u.user_id = g.l_userid AND g.g_status = 'active')
+ WHERE u.user_id = {?} AND u.perms IN('admin', 'user')", $uid);
$sess = $res->fetchOneAssoc();
$perms = $sess['perms'];
unset($sess['perms']);
if (S::has('suid')) {
$suid = S::v('suid');
$logger = S::logger($uid);
- $logger->log("suid_start", S::v('forlife') . " by " . $suid['uid']);
+ $logger->log("suid_start", S::v('hruid') . " by " . $suid['hruid']);
} else {
$logger = S::logger($uid);
setcookie('ORGuid', $uid, (time() + 25920000), '/', '', 0);
}
// Finalizes the session setup.
- $this->makePerms($perms);
+ S::set('perms', User::makePerms($perms));
$this->securityChecks();
$this->setSkin();
$this->updateNbNotifs();
public function tokenAuth($login, $token)
{
- // FIXME: we broke the session here because some RSS feeds (mainly wiki feeds) require
- // a valid nome and checks the permissions. When the PlUser object will be ready, we'll
- // be able to return a simple 'PlUser' object here without trying to alterate the
- // session.
- $res = XDB::query('SELECT u.user_id AS uid, u.perms, u.nom, u.nom_usage, u.prenom, u.promo, FIND_IN_SET(\'femme\', u.flags) AS sexe
+ $res = XDB::query('SELECT u.hruid
FROM aliases AS a
INNER JOIN auth_user_md5 AS u ON (a.id = u.user_id AND u.perms IN ("admin", "user"))
INNER JOIN auth_user_quick AS q ON (a.id = q.user_id AND q.core_rss_hash = {?})
WHERE a.alias = {?} AND a.type != "homonyme"', $token, $login);
if ($res->numRows() == 1) {
- $sess = $res->fetchOneAssoc();
- if (!S::has('uid')) {
- $_SESSION = $sess;
- $this->makePerms($sess['perms']);
- return S::i('uid');
- } else if (S::i('uid') == $sess['uid']) {
- return S::i('uid');
- } else {
- Platal::page()->kill('Invalid state. To be fixed when hruid is ready');
- }
+ $data = $res->fetchOneAssoc();
+ return new User($data['hruid'], $data);
}
return null;
}
function hook_checkcancel($_headers)
{
- return ($_headers['x-org-id'] == S::v('forlife') or S::has_perms());
+ return ($_headers['x-org-id'] == S::v('hruid') or S::has_perms());
}
class ForumsBanana extends Banana
{
- private $forlife;
+ private $user;
- public function __construct($forlife, $params = null)
+ public function __construct(User &$user, $params = null)
{
- $this->forlife = $forlife;
+ $this->user = &$user;
global $globals;
Banana::$msgedit_canattach = false;
Banana::$spool_root = $globals->banana->spool_root;
array_push(Banana::$msgparse_headers, 'x-org-id', 'x-org-mail');
- Banana::$nntp_host = 'news://web_'.$forlife
+ Banana::$nntp_host = 'news://web_' . $user->login()
. ":{$globals->banana->password}@{$globals->banana->server}:{$globals->banana->port}/";
if (S::has_perms()) {
Banana::$msgshow_mimeparts[] = 'source';
WHERE uid={?}", S::i('uid'));
if (!(list($nom, $mail, $sig, $disp, $maj, $unread, $read) = $req->fetchOneRow())) {
$nom = S::v('prenom')." ".S::v('nom');
- $mail = S::v('forlife')."@" . $globals->mail->domain;
+ $mail = $this->user->forlifeEmail();
$sig = $nom." (".S::v('promo').")";
$disp = 0;
$maj = 1;
public function post($dest, $reply, $subject, $body)
{
global $globals;
- $res = XDB::query('SELECT nom, prenom, promo, b.alias AS bestalias
+ $res = XDB::query('SELECT nom, prenom, promo
FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id)
- INNER JOIN aliases AS b ON (b.id = a.id AND FIND_IN_SET(\'bestalias\', b.flags))
- WHERE a.alias = {?}', $this->forlife);
- list($nom, $prenom, $promo, $bestalias) = $res->fetchOneRow();
- Banana::$profile['headers']['From'] = "$prenom $nom ($promo) <$bestalias@{$globals->mail->domain}>";
+ WHERE u.user_id = {?}', $this->user->id());
+ list($nom, $prenom, $promo) = $res->fetchOneRow();
+ Banana::$profile['headers']['From'] = "$prenom $nom ($promo) <{$this->user->bestEmail()}>";
Banana::$profile['headers']['Organization'] = make_Organization();
return parent::post($dest, $reply, $subject, $body);
}
WHERE uid = {?}", S::v('uid'));
if (!(list($nom, $mail, $sig, $disp, $maj, $xface, $unread, $read) = $req->fetchOneRow())) {
$nom = S::v('prenom').' '.S::v('nom');
- $mail = S::v('forlife').'@'.$globals->mail->domain;
+ $mail = S::user()->forlifeEmail();
$sig = $nom.' ('.S::v('promo').')';
$disp = 0;
$maj = 0;
} else {
$group = '';
}
- return '/rss/' . $group . S::v('forlife') . '/' . S::v('core_rss_hash') . '/rss.xml';
+ return '/rss/' . $group . S::v('hruid') . '/' . S::v('core_rss_hash') . '/rss.xml';
}
function hook_platalMessageLink($params)
function run_banana(&$page, $class, array $args)
{
- $banana = new $class(S::v('forlife'), $args);
+ $banana = new $class(S::user(), $args);
$page->assign('banana', $banana->run());
$page->addCssInline($banana->css());
$page->addCssLink('banana.css');
{
static public $listname;
static public $domain;
+ private $user;
- function __construct($forlife, $params = null)
+ function __construct(User &$user, $params = null)
{
global $globals;
+ $this->user = &$user;
+
Banana::$spool_root = $globals->banana->spool_root;
Banana::$spool_boxlist = false;
Banana::$msgedit_canattach = true;
global $platal, $globals;
$nom = S::v('prenom') . ' ' . S::v('nom');
- $mail = S::v('bestalias') . '@' . $globals->mail->domain;
+ $mail = $this->user->bestEmail();
$sig = $nom . ' (' . S::v('promo') . ')';
- Banana::$msgedit_headers['X-Org-Mail'] = S::v('forlife') . '@' . $globals->mail->domain;
+ Banana::$msgedit_headers['X-Org-Mail'] = $this->user->forlifeEmail();
// Tree color
$req = XDB::query("SELECT tree_unread, tree_read
function hook_checkcancel($_headers)
{
- return ($_headers['x-org-id'] == S::v('forlife') or S::has_perms());
+ return ($_headers['x-org-id'] == S::v('hruid') or S::has_perms());
}
function hook_makeLink($params)
static public $domain;
static public $client;
- function __construct($forlife, $params = null)
+ function __construct(User &$user, $params = null)
{
ini_set('memory_limit', '128M');
// function fix_bestalias() {{{1
// Checks for an existing 'bestalias' among the the current user's aliases, and
// eventually selects a new bestalias when required.
-function fix_bestalias($uid)
+function fix_bestalias(User &$user)
{
$res = XDB::query("SELECT COUNT(*)
FROM aliases
WHERE id = {?} AND FIND_IN_SET('bestalias', flags) AND type != 'homonyme'",
- $uid);
+ $user->id());
if ($res->fetchOneCell()) {
return;
}
SET flags=CONCAT(flags,',','bestalias')
WHERE id={?} AND type!='homonyme'
ORDER BY !FIND_IN_SET('usage',flags),alias LIKE '%.%', LENGTH(alias)
- LIMIT 1", $uid);
+ LIMIT 1", $user->id());
}
// function valide_email() {{{1
{
// properties {{{2
- private $uid;
+ private $user;
private $state;
private $_states = Array('let_spams', 'tag_spams', 'tag_and_drop_spams', 'drop_spams');
// constructor {{{2
- public function __construct($uid)
+ public function __construct(User &$user)
{
- if (!$uid) {
+ if (!$user) {
return;
}
- $this->uid = $uid;
- $res = XDB::query('SELECT email FROM emails WHERE uid={?} AND flags="filter"', $uid);
+ $this->user = &$user;
+ $res = XDB::query('SELECT email FROM emails WHERE uid = {?} AND flags = "filter"', $user->id());
if ($res->numRows()) {
$this->state = $res->fetchOneCell();
} else {
$this->state = 'tag_and_drop_spams';
- $res = XDB::query("INSERT INTO emails (uid,email,rewrite,panne,flags)
- VALUES ({?},'tag_and_drop_spams','','0000-00-00','filter')", $uid);
+ $res = XDB::query(
+ "INSERT INTO emails (uid, email, rewrite, panne, flags)
+ VALUES ({?}, 'tag_and_drop_spams', '', '0000-00-00', 'filter')",
+ $user->id());
}
}
public function change($state)
{
$this->state = is_int($state) ? $this->_states[$state] : $state;
- XDB::execute('UPDATE emails SET email={?} WHERE uid={?} AND flags = "filter"',
- $this->state, $this->uid);
+ XDB::execute('UPDATE emails SET email = {?} WHERE uid = {?} AND flags = "filter"',
+ $this->state, $this->user->id());
}
// pubic function level() {{{2
// Storage emails (Polytechnique.org).
abstract class Email
{
- protected $uid;
+ protected $user;
// Basic email properties; $sufficient indicates if the email can be used as
// an unique redirection; $email contains the delivery email address.
{
// constructor {{{2
- public function __construct($uid, $row)
+ public function __construct(User &$user, $row)
{
- $this->uid = $uid;
+ $this->user = &$user;
$this->sufficient = true;
list($this->email, $flags, $this->rewrite, $this->allow_rewrite, $this->hash, $this->panne, $this->last, $this->panne_level) = $row;
XDB::execute("UPDATE emails
SET panne_level = IF(flags = 'panne', panne_level - 1, panne_level),
flags = 'active'
- WHERE uid={?} AND email={?}", $this->uid, $this->email);
- S::logger()->log("email_on", $this->email.($this->uid!=S::v('uid') ? "(admin on {$this->uid})" : ""));
+ WHERE uid = {?} AND email = {?}", $this->user->id(), $this->email);
+ S::logger()->log("email_on", $this->email . ($this->user->id() != S::v('uid') ? "(admin on {$this->user->login()})" : ""));
$this->active = true;
$this->broken = false;
}
{
if ($this->active) {
XDB::execute("UPDATE emails SET flags =''
- WHERE uid={?} AND email={?}", $this->uid, $this->email);
- S::logger()->log("email_off",$this->email.($this->uid != S::v('uid') ? "(admin on {$this->uid})" : "") );
+ WHERE uid = {?} AND email = {?}", $this->user->id(), $this->email);
+ S::logger()->log("email_off", $this->email . ($this->user->id() != S::v('uid') ? "(admin on {$this->user->login()})" : "") );
$this->active = false;
}
}
if (!$rewrite || !isvalid_email($rewrite)) {
$rewrite = '';
}
- XDB::execute('UPDATE emails SET rewrite={?} WHERE uid={?} AND email={?}', $rewrite, $this->uid, $this->email);
+ XDB::execute('UPDATE emails SET rewrite = {?} WHERE uid = {?} AND email = {?}', $rewrite, $this->user->id(), $this->email);
$this->rewrite = $rewrite;
if (!$this->allow_rewrite) {
global $globals;
$this->hash = rand_url_id();
XDB::execute("UPDATE emails
SET hash = {?}
- WHERE uid = {?} AND email = {?}", $this->hash, $this->uid, $this->email);
+ WHERE uid = {?} AND email = {?}", $this->hash, $this->user->id(), $this->email);
}
- $res = XDB::query("SELECT IF(u.nom_usage = '', u.nom, u.nom_usage) AS nom, u.prenom, FIND_IN_SET('femme', u.flags) AS sex,
- q.core_mail_fmt, a.alias AS forlife, a2.alias AS bestalias
- FROM auth_user_md5 AS u
- INNER JOIN auth_user_quick AS q ON (u.user_id = q.user_id)
- INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
- INNER JOIN aliases AS a2 ON (a2.id = u.user_id AND FIND_IN_SET('bestalias', a2.flags))
- WHERE u.user_id = {?}", $this->uid);
- list($nom, $prenom, $sexe, $fmt, $forlife, $bestalias) = $res->fetchOneRow();
$mail = new PlMailer('emails/rewrite-in.mail.tpl');
$mail->assign('mail', $this);
- $mail->assign('nom', $nom);
- $mail->assign('prenom', $prenom);
- $mail->assign('sexe', $sexe);
- $mail->assign('forlife', $forlife);
+ $mail->assign('user', $this->user);
$mail->assign('baseurl', $globals->baseurl);
$mail->assign('sitename', $globals->core->sitename);
$mail->assign('to', $this->email);
- $mail->send($fmt == 'html');
+ $mail->send($this->user->isEmailFormatHtml());
}
return;
}
return XDB::execute("UPDATE emails
SET panne_level = 0, panne = 0, last = 0
WHERE uid = {?} AND email = {?}",
- $this->uid, $this->email);
+ $this->user->id(), $this->email);
}
// public function has_rewrite() {{{2
{
$res = XDB::query("SELECT mail_storage
FROM auth_user_md5
- WHERE user_id = {?}", $this->uid);
+ WHERE user_id = {?}", $this->user->id());
return new PlFlagSet($res->fetchOneCell());
}
{
XDB::execute("UPDATE auth_user_md5
SET mail_storage = {?}
- WHERE user_id = {?}", $storages, $this->uid);
+ WHERE user_id = {?}", $storages, $this->user->id());
}
// Returns the list of allowed storages for the @p user.
- static public function get_allowed_storages($uid)
+ static public function get_allowed_storages(User &$user)
{
global $globals;
$storages = array();
// Google Apps storage is available for users with valid Google Apps account.
require_once 'googleapps.inc.php';
if ($globals->mailstorage->googleapps_domain &&
- GoogleAppsAccount::account_status($uid) == 'active') {
+ GoogleAppsAccount::account_status($user->id()) == 'active') {
$storages[] = 'googleapps';
}
}
- public function __construct($uid, $name)
+ public function __construct(User &$user, $name)
{
- $this->uid = $uid;
+ $this->user = &$user;
$this->email = $name;
$this->display_email = (isset($this->display_names[$name]) ? $this->display_names[$name] : $name);
// properties {{{2
private $flag_active = 'active';
- private $uid;
+ private $user;
public $emails;
public $bogo;
// constructor {{{2
- public function __construct($_uid)
+ public function __construct(User &$user)
{
- $this->uid = $_uid;
- $this->bogo = new Bogo($_uid);
+ $this->user = &$user;
+ $this->bogo = new Bogo($user);
// Adds third-party email redirections.
$res = XDB::iterRow("SELECT email, flags, rewrite, allow_rewrite, hash, panne, last, panne_level
FROM emails
- WHERE uid = {?} AND flags != 'filter'", $_uid);
+ WHERE uid = {?} AND flags != 'filter'", $user->id());
$this->emails = Array();
while ($row = $res->next()) {
- $this->emails[] = new EmailRedirection($_uid, $row);
+ $this->emails[] = new EmailRedirection($user, $row);
}
// Adds local email storage backends.
- foreach (EmailStorage::get_allowed_storages($_uid) as $storage) {
- $this->emails[] = new EmailStorage($_uid, $storage);
+ foreach (EmailStorage::get_allowed_storages($user) as $storage) {
+ $this->emails[] = new EmailStorage($user, $storage);
}
}
if (!$this->other_active($email)) {
return ERROR_INACTIVE_REDIRECTION;
}
- XDB::execute('DELETE FROM emails WHERE uid={?} AND email={?}', $this->uid, $email);
- S::logger()->log('email_del',$email.($this->uid!=S::v('uid') ? " (admin on {$this->uid})" : ""));
+ XDB::execute('DELETE FROM emails WHERE uid = {?} AND email = {?}', $this->user->id(), $email);
+ S::logger()->log('email_del', $email . ($this->user->id() != S::v('uid') ? " (admin on {$this->user->login()})" : ""));
foreach ($this->emails as $i => $mail) {
if ($email == $mail->email) {
unset($this->emails[$i]);
if (!isvalid_email_redirection($email_stripped)) {
return ERROR_LOOP_EMAIL;
}
- XDB::execute('REPLACE INTO emails (uid,email,flags) VALUES({?},{?},"active")', $this->uid, $email);
+ XDB::execute('REPLACE INTO emails (uid,email,flags) VALUES({?},{?},"active")', $this->user->id(), $email);
if ($logger = S::v('log', null)) { // may be absent --> step4.php
- S::logger()->log('email_add',$email.($this->uid!=S::v('uid') ? " (admin on {$this->uid})" : ""));
+ S::logger()->log('email_add', $email . ($this->user->id() != S::v('uid') ? " (admin on {$this->user->login()})" : ""));
}
foreach ($this->emails as $mail) {
if ($mail->email == $email_stripped) {
return SUCCESS;
}
}
- $this->emails[] = new EmailRedirection($this->uid, array($email, 'active', '', 0, null, '0000-00-00', '0000-00-00', 0));
+ $this->emails[] = new EmailRedirection($this->user, array($email, 'active', '', 0, null, '0000-00-00', '0000-00-00', 0));
// security stuff
- check_email($email, "Ajout d'une adresse surveillée aux redirections de " . $this->uid);
+ check_email($email, "Ajout d'une adresse surveillée aux redirections de " . $this->user->login());
check_redirect($this);
return SUCCESS;
}
{
XDB::execute("UPDATE emails
SET flags = 'disable'
- WHERE flags = 'active' AND uid = {?}", $this->uid);
+ WHERE flags = 'active' AND uid = {?}", $this->user->id);
foreach ($this->emails as &$mail) {
if ($mail->active && $mail->has_disable()) {
$mail->disabled = true;
{
XDB::execute("UPDATE emails
SET flags = 'active'
- WHERE flags = 'disable' AND uid = {?}", $this->uid);
+ WHERE flags = 'disable' AND uid = {?}", $this->user->id);
foreach ($this->emails as &$mail) {
if ($mail->disabled) {
$mail->active = true;
public function get_uid()
{
- return $this->uid;
+ return $this->user->id();
}
}
function post_queue_u_create($job) {
global $globals;
- // Retrieves the user parameters (userid and forlife).
+ // Retrieves the user parameters (GoogleApps username and user_id).
$parameters = json_decode($job['j_parameters'], true);
- $forlife = isset($parameters['username']) ? $parameters['username'] : null;
- $userid = $job['q_recipient_id'];
- if (!$forlife || !$userid) {
+ $username = isset($parameters['username']) ? $parameters['username'] : null;
+ if (!($user = User::getSilent($username))) {
return;
}
// Adds a redirection to the Google Apps delivery address, if requested by
// the user at creation time.
- $account = new GoogleAppsAccount($userid, $forlife);
+ $account = new GoogleAppsAccount($user);
if ($account->activate_mail_redirection) {
require_once('emails.inc.php');
- $storage = new EmailStorage($userid, 'googleapps');
+ $storage = new EmailStorage($user, 'googleapps');
$storage->activate();
}
$res = XDB::query(
"SELECT FIND_IN_SET('femme', u.flags), prenom
FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id)
- WHERE a.alias = {?}",
- $forlife);
+ WHERE u.user_id = {?}", $user->id());
list($sexe, $prenom) = $res->fetchOneRow();
$mailer = new PlMailer('googleapps/create.mail.tpl');
$mailer->assign('account', $account);
- $mailer->assign('email', $forlife . '@' . $globals->mail->domain);
+ $mailer->assign('email', $user->bestEmail());
$mailer->assign('googleapps_domain', $globals->mailstorage->googleapps_domain);
$mailer->assign('prenom', $prenom);
$mailer->assign('sexe', $sexe);
// to the Google Apps delivery address, provided the account is active (it might
// have been deleted between the unsuspension and the post-queue processing).
$parameters = json_decode($job['j_parameters'], true);
- $forlife = isset($parameters['username']) ? $parameters['username'] : null;
- $userid = $job['q_recipient_id'];
- if (!$forlife || !$userid) {
+ $username = isset($parameters['username']) ? $parameters['username'] : null;
+ if (!($user = User::getSilent($username))) {
return;
}
if (isset($parameters['suspended']) && $parameters['suspended'] == false) {
require_once('emails.inc.php');
- $account = new GoogleAppsAccount($userid, $forlife);
+ $account = new GoogleAppsAccount($user);
if ($account->active()) {
// Re-adds the email redirection (if the user did request it).
if ($account->activate_mail_redirection) {
- $storage = new EmailStorage($userid, 'googleapps');
+ $storage = new EmailStorage($user, 'googleapps');
$storage->activate();
}
$res = XDB::query(
"SELECT FIND_IN_SET('femme', u.flags), prenom
FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id)
- WHERE a.alias = {?}",
- $forlife);
+ WHERE u.user_id = {?}", $user->id());
list($sexe, $prenom) = $res->fetchOneRow();
$mailer = new PlMailer('googleapps/unsuspend.mail.tpl');
$mailer->assign('account', $account);
- $mailer->assign('email', $forlife . '@' . $globals->mail->domain);
+ $mailer->assign('email', $user->bestEmail());
$mailer->assign('prenom', $prenom);
$mailer->assign('sexe', $sexe);
$mailer->send();
class GoogleAppsAccount
{
// User identification: user id, and forlife.
- private $uid;
+ private $user;
public $g_account_name;
// Local account parameters.
// Constructs the account object, by retrieving all informations from the
// GApps account table, from GApps job queue, and from plat/al validation queue.
- public function __construct($uid, $account_name = NULL)
+ public function __construct(User &$user)
{
- if ($account_name == NULL) {
- require_once 'user.func.inc.php';
- $account_name = get_user_forlife($uid, '_silent_user_callback');
+ $this->user = &$user;
+ if (!$this->user || !$this->user->login()) {
+ return;
}
- $this->uid = $uid;
- $this->g_account_name = $account_name;
+ // TODO: switch to multi-domain Google Apps, and use $this->user->forlifeEmail()
+ // as Google Apps idenfiant (requires changes in gappsd).
+ $this->g_account_name = $this->user->login();
$this->g_status = NULL;
- if (!$this->g_account_name) {
- return;
- }
$res = XDB::query(
"SELECT l_sync_password, l_activate_mail_redirection,
UNIX_TIMESTAMP(r_last_login) as r_last_login,
UNIX_TIMESTAMP(r_last_webmail) as r_last_webmail
FROM gapps_accounts
- WHERE g_account_name = {?}",
- $account_name);
+ WHERE g_account_name = {?}", $this->g_account_name);
if ($account = $res->fetchOneAssoc()) {
$this->sync_password = $account['l_sync_password'];
$this->activate_mail_redirection = $account['l_activate_mail_redirection'];
FROM gapps_queue
WHERE q_recipient_id = {?} AND
p_status IN ('idle', 'active', 'softfail')
- GROUP BY j_type",
- $this->uid);
+ GROUP BY j_type", $this->user->id());
$pending = $res->fetchOneAssoc();
$this->pending_create = $pending['pending_create'];
$this->pending_update = $pending['pending_update'];
{
require_once('validations.inc.php');
$this->pending_validation_unsuspend =
- Validate::get_typed_requests_count($this->uid, 'gapps-unsuspend');
+ Validate::get_typed_requests_count($this->user->id(), 'gapps-unsuspend');
}
// Retrieves all the pending update job in the gappsd queue for the current
FROM gapps_queue
WHERE q_recipient_id = {?} AND
p_status IN ('idle', 'active', 'softfail') AND
- j_type = 'u_update'",
- $this->uid);
+ j_type = 'u_update'", $this->user->id());
while ($update = $res->next()) {
$update_data = json_decode($update["j_parameters"], true);
p_priority = 'immediate',
j_type = {?}, j_parameters = {?}",
S::v('uid'),
- $this->uid,
+ $this->user->id(),
$type,
json_encode($parameters));
}
if (!$this->pending_update_suspension && !$this->pending_validation_unsuspend) {
require_once('validations.inc.php');
- $unsuspend = new GoogleAppsUnsuspendReq($this->uid);
+ $unsuspend = new GoogleAppsUnsuspendReq($this->user);
$unsuspend->submit();
$this->pending_validation_unsuspend = true;
}
$res = XDB::query(
"SELECT password
FROM auth_user_md5
- WHERE user_id = {?}",
- $this->uid);
+ WHERE user_id = {?}", $this->user->id());
$password = ($res->numRows() > 0 ? $res->fetchOneCell() : false);
} else {
$password = false;
$res = XDB::query(
"SELECT nom, nom_usage, prenom
FROM auth_user_md5
- WHERE user_id = {?}",
- $this->uid);
+ WHERE user_id = {?}", $this->user->id());
list($nom, $nom_usage, $prenom) = $res->fetchOneRow();
// Adds an 'unprovisioned' entry in the gapps_accounts table.
g_first_name = {?},
g_last_name = {?},
g_status = 'unprovisioned'",
- $this->uid,
+ $this->user->id(),
$password_sync,
$redirect_mails,
$this->g_account_name,
));
// Updates the GoogleAppsAccount status.
- $this->__construct($this->uid, $this->g_account_name);
+ $this->__construct($this->user);
}
}
private function getUser($uid, $email)
{
- $res = XDB::query("SELECT FIND_IN_SET('femme', flags) AS sexe, nom, prenom, promo
- FROM auth_user_md5
- WHERE user_id = {?}", $uid);
- if ($res->numRows() == 0) {
+ $user = User::getSilent($uid);
+ if (!$user) {
return null;
}
- $user = $res->fetchOneAssoc();
- $user['id'] = $uid;
- $user['forlife'] = make_forlife($user['prenom'], $user['nom'], $user['promo']);
- $user['mail'] = $email;
- $user['to'] = '"' . $user['prenom'] . ' ' . $user['nom'] . '" <' . $email . '>';
- return $user;
+
+ global $globals;
+ return array(
+ 'user' => $user,
+ 'id' => $user->id(),
+ 'sexe' => $user->isFemale(),
+ 'mail' => $email,
+ 'to' => '"' . $user->fullName() . '" <' . $email . '>',
+ 'forlife_email' => $user->login() . '@' . $globals->mail->domain,
+ 'forlife_email2' => $user->login() . '@' . $globals->mail->domain2,
+ );
}
private function getFrom($from, $sender)
{
global $globals;
- if ($from == 'staff') {
+ if ($from == 'staff' || !($user = User::getSilent($sender))) {
return '"L\'équipe de Polytechnique.org" <register@' . $globals->mail->domain . '>';
- } else {
- $res = XDB::query("SELECT u.nom, u.prenom, a.alias
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id AND FIND_IN_SET('bestalias', a.flags))
- WHERE u.user_id = {?}", $sender);
- if (!$res->numRows()) {
- return '"L\'équipe de Polytechnique.org" <register@' . $globals->mail->domain . '>';
- }
- $sender = $res->fetchOneAssoc();
- return '"' . $sender['prenom'] . ' ' . $sender['nom'] . '" <' . $sender['alias'] . '@' . $globals->mail->domain . '>';
}
+ return '"' . $user->fullName() . '" <' . $user->bestEmail() . '>';
}
private function &getEngine($type, $data, $from)
$this->engine->process($this->user);
if ($valid) {
require_once 'validations.inc.php';
- $valid = new MarkReq($this->sender, $this->user['id'], $this->user['mail'],
+ $valid = new MarkReq(User::getSilent($this->sender), $this->user['user'], $this->user['mail'],
$this->from == 'user', $this->type, $this->data);
$valid->submit();
}
public function __construct($data, $from)
{
list($this->name, $this->domain) = explode('@', $data);
- $res = XDB::query("SELECT prenom, IF (nom_usage != '', nom_usage, nom)
- FROM auth_user_md5
- WHERE user_id = {?} AND user_id != 0", $from ? $from : 0);
- if ($res->numRows()) {
- list($prenom, $nom) = $res->fetchOneRow();
- $from = "$prenom $nom";
+ if ($from && ($user = User::getSilent($from))) {
+ $from = $user->fullName();
} else {
$from = "Je";
}
public function __construct($data, $from)
{
$this->group = $data;
- $res = XDB::query("SELECT prenom, IF (nom_usage != '', nom_usage, nom)
- FROM auth_user_md5
- WHERE user_id = {?} AND user_id != 0", $from ? $from : 0);
- if ($res->numRows()) {
- list($prenom, $nom) = $res->fetchOneRow();
- $from = "$prenom $nom vient";
+ if ($from && ($user = User::getSilent($from))) {
+ $from = $user->fullName() . " vient";
} else {
$from = "Je viens";
}
return $hash;
}
- public function sendTo($prenom, $nom, $login, $sexe, $html, $hash = 0)
+ public function sendTo($hruid, $email, $prenom, $nom, $sexe, $html, $hash = 0)
{
- global $globals;
- $alias = $login;
- if (strpos($login, '@') === false) {
- $login = "$login@{$globals->mail->domain}";
- }
- require_once('user.func.inc.php');
- $forlife = get_user_forlife($login, '_silent_user_callback');
- if ($forlife) {
- $alias = $forlife;
+ // If $email is not a real email address, tries to compute it up from
+ // the hruid. Otherwise, we suppose that caller will have used a valid
+ // and canonical email address.
+ if (strpos($email, '@') === false) {
+ if (!($user = User::getSilent($email))) {
+ Platal::page()->trigError("'$email' is neither a valid email address nor a valid login; did not send the email.");
+ }
+ $email = $user->bestEmail();
}
- if (strpos($alias, '@') === false && (is_null($hash) || $hash == 0)) {
- $hash = $this->createHash(array($prenom, $nom, $login, $sexe, $html, rand(), "X.org rulez"));
+ if ($hruid && (is_null($hash) || $hash == 0)) {
+ $hash = $this->createHash(array($email, $prenom, $nom, $sexe, $html, rand(), "X.org rulez"));
XDB::query("UPDATE {$this->_subscriptionTable} as ni
- INNER JOIN aliases AS a ON (ni.user_id = a.id)
+ INNER JOIN auth_user_md5 AS u USING (user_id)
SET ni.hash = {?}
- WHERE ni.user_id != 0 AND a.alias = {?}",
- $hash, $alias);
+ WHERE ni.user_id != 0 AND u.hruid = {?}",
+ $hash, $hruid);
}
$mailer = new PlMailer($this->_tpl);
$mailer->assign('sexe', $sexe);
$mailer->assign('prefix', null);
$mailer->assign('hash', $hash);
- $mailer->assign('email', $login);
- $mailer->assign('alias', $alias);
- $mailer->addTo("\"$prenom $nom\" <$login>");
+ $mailer->assign('email', $email);
+ $mailer->assign('alias', $hruid);
+ $mailer->addTo("\"$prenom $nom\" <$email>");
$mailer->send($html);
}
protected function getAllRecipients()
{
global $globals;
- return "SELECT u.user_id, CONCAT(a.alias, '@{$globals->mail->domain}'),
+ return "SELECT u.user_id, u.hruid, CONCAT(a.alias, '@{$globals->mail->domain}'),
u.prenom, IF(u.nom_usage='', u.nom, u.nom_usage),
FIND_IN_SET('femme', u.flags),
q.core_mail_fmt AS pref, ni.hash AS hash
return;
}
$sent = array();
- while (list($uid, $bestalias, $prenom, $nom, $sexe, $fmt, $hash) = $res->next()) {
- $sent[] = "(user_id='$uid'" . (!$uid ? " AND email='$bestalias')": ')');
- $this->sendTo($prenom, $nom, $bestalias, $sexe, $fmt=='html', $hash);
+ while (list($uid, $hruid, $email, $prenom, $nom, $sexe, $fmt, $hash) = $res->next()) {
+ $sent[] = "(user_id='$uid'" . (!$uid ? " AND email='$email')": ')');
+ $this->sendTo($hruid, $email, $prenom, $nom, $sexe, $fmt=='html', $hash);
}
XDB::execute("UPDATE {$this->_subscriptionTable}
SET last = {?}
{
$page =& Platal::page();
$page->changeTpl($template, NO_SKIN);
- $uid = Platal::session()->tokenAuth($alias, $hash);
- if (empty($uid)) {
+ $user = Platal::session()->tokenAuth($alias, $hash);
+ if (is_null($user)) {
if ($require_uid) {
exit;
} else {
- $uid = null;
+ $user = null;
}
}
$page->assign('rss_hash', $hash);
header('Content-Type: application/rss+xml; charset=utf8');
}
- return $uid;
+ return is_null($user) ? null : $user->id();
}
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
{
require_once 'emails.inc.php';
if (is_null($red)) {
- $red = new Redirect(S::v('uid'));
+ $red = new Redirect(S::user());
}
if ($red->get_uid() == S::v('uid')) {
$_SESSION['no_redirect'] = !$red->other_active('');
// + delete maillists
global $globals;
- $uid = intval($user_id);
- $res = XDB::query("SELECT alias FROM aliases WHERE type='a_vie' AND id={?}", $uid);
- $alias = $res->fetchOneCell();
+ $uid = intval($user_id);
+ $user = User::getSilent($uid);
+ list($alias) = explode('@', $user->forlifeEmail());
$tables_to_clear = array('uid' => array('competences_ins', 'entreprises', 'langues_ins', 'mentor_pays',
'mentor_secteurs', 'mentor', 'perte_pass', 'watch_sub'),
if ($globals->mailstorage->googleapps_domain) {
require_once 'googleapps.inc.php';
if (GoogleAppsAccount::account_status($uid)) {
- $account = new GoogleAppsAccount($uid, $alias);
+ $account = new GoogleAppsAccount($user);
$account->suspend();
}
}
}
// }}}
-// {{{ function get_user_login()
-
-// Defaut callback to call when a login is not found
-function _default_user_callback($login)
-{
- Platal::page()->trigError("Il n'y a pas d'utilisateur avec l'identifiant : $login");
- return;
-}
-
-function _silent_user_callback($login)
-{
- return;
-}
-
-function get_user_login($data, $get_forlife = false, $callback = '_default_user_callback')
-{
- global $globals;
-
- if (is_numeric($data)) {
- $res = XDB::query("SELECT alias FROM aliases WHERE type='a_vie' AND id={?}", $data);
- if ($res->numRows()) {
- return $res->fetchOneCell();
- } else {
- call_user_func($callback, $data);
- return false;
- }
- }
-
- $data = trim(strtolower($data));
-
- if (strstr($data, '@')===false) {
- $data = $data.'@'.$globals->mail->domain;
- }
-
- list($mbox, $fqdn) = explode('@', $data);
- if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) {
-
- $res = XDB::query("SELECT a.alias
- FROM aliases AS a
- INNER JOIN aliases AS b ON (a.id = b.id AND b.type IN ('alias', 'a_vie') AND b.alias={?})
- WHERE a.type = 'a_vie'", $mbox);
- if ($res->numRows()) {
- return $get_forlife ? $res->fetchOneCell() : $mbox;
- }
-
- if (preg_match('/^(.*)\.([0-9]{4})$/u', $mbox, $matches)) {
- $res = XDB::query("SELECT a.alias
- FROM aliases AS a
- INNER JOIN aliases AS b ON (a.id = b.id AND b.type IN ('alias', 'a_vie') AND b.alias={?})
- INNER JOIN auth_user_md5 AS u ON (a.id = u.user_id AND promo = {?})
- WHERE a.type = 'a_vie'", $matches[1], $matches[2]);
- if ($res->numRows() == 1) {
- return $res->fetchOneCell();
- }
- }
- call_user_func($callback, $data);
- return false;
-
- } elseif ($fqdn == $globals->mail->alias_dom || $fqdn == $globals->mail->alias_dom2) {
-
- $res = XDB::query("SELECT redirect
- FROM virtual_redirect
- INNER JOIN virtual USING(vid)
- WHERE alias={?}", $mbox.'@'.$globals->mail->alias_dom);
- if ($redir = $res->fetchOneCell()) {
- list($alias) = explode('@', $redir);
- } else {
- call_user_func($callback, $data);
- $alias = false;
- }
- return $alias;
- } else {
-
- $res = XDB::query("SELECT alias
- FROM aliases AS a
- INNER JOIN emails AS e ON e.uid=a.id
- WHERE e.email={?} AND a.type='a_vie'", $data);
- switch ($i = $res->numRows()) {
- case 0:
- call_user_func($callback, $data);
- return false;
-
- case 1:
- return $res->fetchOneCell();
-
- default:
- if (S::has_perms()) {
- $aliases = $res->fetchColumn();
- Platal::page()->trigError("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases));
- } else {
- $res->free();
- }
- }
- }
-
- return false;
-}
-
-// }}}
-// {{{ function get_user_forlife()
-
-function get_user_forlife($data, $callback = '_default_user_callback')
-{
- return get_user_login($data, true, $callback);
-}
-
-// }}}
-// {{{ function get_users_forlife_list()
-
-function get_users_forlife_list($members, $strict = false, $callback = '_default_user_callback')
-{
- if (!is_array($members)) {
- if (strlen(trim($members)) == 0) {
- return null;
- }
- $members = split("[; ,\r\n\|]+", $members);
- }
- if ($members) {
- $list = array();
- foreach ($members as $i => $alias) {
- $alias = trim($alias);
- if (empty($alias)) {
- continue;
- }
- if (($login = get_user_forlife($alias, $callback)) !== false) {
- $list[$i] = $login;
- } else if (!$strict) {
- $list[$i] = $alias;
- } else {
- global $globals;
- if (strpos($alias, '@') !== false) {
- list($user, $dom) = explode('@', $alias);
- if ($dom != $globals->mail->domain && $dom != $globals->mail->domain2) {
- $list[$i] = $alias;
- }
- }
- }
- }
- return $list;
- }
- return null;
-}
-
-// }}}
// {{{ function has_user_right()
function has_user_right($pub, $view = 'private') {
if ($pub == $view) return true;
{
$where = $this->getUids($users);
if ($where) {
- $where = "a.alias IN ($where)";
+ $where = "u.hruid IN ($where)";
} else {
$where = " 0 ";
}
private function getUids(array $users)
{
- $users = get_users_forlife_list($users, true, '_silent_user_callback');
+ $users = User::getBulkHruid($users, array('User', '_silent_user_callback'));
if (is_null($users)) {
return '';
}
{
// {{{ properties
- public $uid;
- public $prenom;
- public $nom;
- public $promo;
- public $sexe;
- public $bestalias;
- public $forlife;
+ public $user;
public $stamp;
public $unique;
// {{{ constructor
/** constructeur
- * @param $_uid user id
+ * @param $_user user object
* @param $_unique requête pouvant être multiple ou non
* @param $_type type de la donnée comme dans le champ type de x4dat.requests
*/
- public function __construct($_uid, $_unique, $_type)
+ public function __construct(User &$_user, $_unique, $_type)
{
- $this->uid = $_uid;
+ $this->user = &$_user;
$this->stamp = date('YmdHis');
$this->unique = $_unique;
$this->type = $_type;
- $res = XDB::query(
- "SELECT u.prenom, u.nom, u.promo, FIND_IN_SET('femme', u.flags) AS sexe, a.alias, b.alias
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON ( u.user_id=a.id AND a.type='a_vie' )
- INNER JOIN aliases AS b ON ( u.user_id=b.id AND b.type!='homonyme' AND FIND_IN_SET('bestalias', b.flags) )
- WHERE u.user_id={?}", $_uid);
- list($this->prenom, $this->nom, $this->promo, $this->sexe, $this->forlife, $this->bestalias) = $res->fetchOneRow();
}
// }}}
public function submit()
{
if ($this->unique) {
- XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?}', $this->uid, $this->type);
+ XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?}', $this->user->id(), $this->type);
}
$this->stamp = date('YmdHis');
XDB::execute('INSERT INTO requests (user_id, type, data, stamp) VALUES ({?}, {?}, {?}, {?})',
- $this->uid, $this->type, $this, $this->stamp);
+ $this->user->id(), $this->type, $this, $this->stamp);
global $globals;
$globals->updateNbValid();
{
XDB::execute('UPDATE requests SET data={?}, stamp=stamp
WHERE user_id={?} AND type={?} AND stamp={?}',
- $this, $this->uid, $this->type, $this->stamp);
+ $this, $this->user->id(), $this->type, $this->stamp);
return true;
}
if ($this->unique) {
$success = XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?}',
- $this->uid, $this->type);
+ $this->user->id(), $this->type);
} else {
$success = XDB::execute('DELETE FROM requests WHERE user_id={?} AND type={?} AND stamp={?}',
- $this->uid, $this->type, $this->stamp);
+ $this->user->id(), $this->type, $this->stamp);
}
$globals->updateNbValid();
return $success;
if (!strlen(trim(Env::v('comm')))) {
return true;
}
- $this->comments[] = Array(S::v('bestalias'), Env::v('comm'), $formid);
+ $this->comments[] = Array(S::user()->login(), Env::v('comm'), $formid);
// envoi d'un mail à hotliners
global $globals;
$mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}");
$mailer->addTo($globals->core->admin_email);
- $body = "Validation {$this->type} pour {$this->prenom} {$this->nom}\n\n"
- . S::v('bestalias')." a ajouté le commentaire :\n\n"
- . Env::v('comm')."\n\n"
- . "cf la discussion sur : ".$globals->baseurl."/admin/validate";
+ $body = "Validation {$this->type} pour {$this->user->id()}\n\n"
+ . S::user()->login() . " a ajouté le commentaire :\n\n"
+ . Env::v('comm') . "\n\n"
+ . "cf la discussion sur : " . $globals->baseurl . "/admin/validate";
$mailer->setTxtBody(wordwrap($body));
$mailer->send();
$mailer = new PlMailer();
$mailer->setSubject($this->_mail_subj());
$mailer->setFrom("validation+{$this->type}@{$globals->mail->domain}");
- $mailer->addTo("\"{$this->prenom} {$this->nom}\" <{$this->bestalias}@{$globals->mail->domain}>");
+ $mailer->addTo("\"{$this->user->fullName()}\" <{$this->user->bestEmail()}>");
$mailer->addCc("validation+{$this->type}@{$globals->mail->domain}");
- $body = ($this->sexe ? "Chère camarade,\n\n" : "Cher camarade,\n\n")
+ $body = ($this->user->isFemale() ? "Chère camarade,\n\n" : "Cher camarade,\n\n")
. $this->_mail_body($isok)
. (Env::has('comm') ? "\n\n".Env::v('comm') : '')
. "\n\nCordialement,\n\n-- \nL'équipe de Polytechnique.org\n";
public function id()
{
- return $this->uid . '_' . $this->type . '_' . $this->stamp;
+ return $this->user->id() . '_' . $this->type . '_' . $this->stamp;
}
// }}}
// }}}
// {{{ constructor
- public function __construct($_uid, $_alias, $_raison, $_public, $_stamp=0)
+ public function __construct(User &$_user, $_alias, $_raison, $_public, $_stamp=0)
{
global $globals;
- parent::__construct($_uid, true, 'alias', $_stamp);
+ parent::__construct($_user, true, 'alias', $_stamp);
$this->alias = $_alias.'@'.$globals->mail->alias_dom;
$this->raison = $_raison;
$this->public = $_public;
SELECT v.alias
FROM virtual_redirect AS vr
INNER JOIN virtual AS v ON (v.vid=vr.vid AND v.alias LIKE '%@{$globals->mail->alias_dom}')
- WHERE vr.redirect={?} OR vr.redirect={?}",
- "{$this->forlife}@{$globals->mail->domain}", "{$this->forlife}@{$globals->mail->domain2}");
+ WHERE vr.redirect = {?} OR vr.redirect = {?}",
+ $this->user->forlifeEmail(),
+ // TODO: remove this über-ugly hack. The issue is that you need
+ // to remove all @m4x.org addresses in virtual_redirect first.
+ $this->user->login() . '@' . $globals->mail->domain2);
$this->old = $res->fetchOneCell();
- if (empty($this->old)) { unset($this->old); }
+ if (empty($this->old)) {
+ unset($this->old);
+ }
}
// }}}
static public function get_request($uid)
{
- return parent::get_typed_request($uid,'alias');
+ return parent::get_typed_request($uid, 'alias');
}
// }}}
public function commit ()
{
XDB::execute("UPDATE auth_user_quick SET emails_alias_pub = {?} WHERE user_id = {?}",
- $this->public, $this->uid);
+ $this->public, $this->user->id());
if ($this->old) {
- return XDB::execute('UPDATE virtual SET alias={?} WHERE alias={?}',
+ return XDB::execute("UPDATE virtual SET alias = {?} WHERE alias = {?}",
$this->alias, $this->old);
} else {
- XDB::execute('INSERT INTO virtual SET alias={?},type="user"', $this->alias);
+ XDB::execute("INSERT INTO virtual SET alias = {?},type='user'", $this->alias);
$vid = XDB::insertId();
- $dom = $this->shorter_domain();
- return XDB::query('INSERT INTO virtual_redirect (vid,redirect) VALUES ({?}, {?})',
- $vid, $this->forlife.'@'.$dom);
+ return XDB::query("INSERT INTO virtual_redirect (vid,redirect) VALUES ({?}, {?})",
+ $vid, $this->user->forlifeEmail());
}
}
{
// {{{ properties
- public $m_forlife;
- public $m_bestalias;
- public $m_prenom;
- public $m_nom;
- public $m_promo;
- public $m_sexe;
- public $m_email;
- public $old_email;
+ public $m_user;
public $m_comment;
+ public $m_email;
private $m_reactive = false;
// }}}
// {{{ constructor
- public function __construct($sender, $user, $email, $comment = null)
+ public function __construct(User &$sender, User &$user, $email, $comment = null)
{
parent::__construct($sender, false, 'broken');
- $this->m_email = $email;
+ $this->m_user = &$user;
$this->m_comment = trim($comment);
- $this->m_forlife = $user['forlife'];
- $this->m_bestalias = $user['bestalias'];
- $this->m_prenom = $user['prenom'];
- $this->m_nom = $user['nom'];
- $this->m_promo = $user['promo'];
- $this->m_sexe = $user['sexe'];
- $this->old_email = $user['email'];
+ $this->m_email = $email;
}
// }}}
protected function _mail_subj()
{
- return "[Polytechnique.org] Récupération de {$this->m_prenom} {$this->m_nom} ({$this->m_promo})";
+ return "[Polytechnique.org] Récupération de {$this->m_user->fullName()} ({$this->m_user->promo()})";
}
// }}}
protected function _mail_body($isok)
{
if ($isok && !$this->m_reactive) {
- return " Un email de contact vient d'être envoyé"
- ." à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) pour confirmer sa volonté de"
- ." mettre à jour sa redirection Polytechnique.org !\n\n"
- ."Merci de ta participation !\n";
+ return " Un email de contact vient d'être envoyé à {$this->m_user->fullName()}"
+ . " ({$this->m_user->promo()}) pour confirmer sa volonté de"
+ . " mettre à jour sa redirection Polytechnique.org !\n\n"
+ . "Merci de ta participation !\n";
} elseif ($isok) {
- return " L'adresse de redirection {$this->m_email} de {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) "
+ return " L'adresse de redirection {$this->m_email} de {$this->m_user->fullName()} ({$this->m_user->promo()}) "
."vient d'être réactivée. Un email lui a été envoyé pour l'en informer.\n\n"
."Merci de ta participation !\n";
} else {
- return " Nous n'utiliserons pas cette adresse pour contacter {$this->m_prenom} {$this->m_nom} ({$this->m_promo}).";
+ return " Nous n'utiliserons pas cette adresse pour contacter {$this->m_user->fullName()} ({$this->m_user->promo()}).";
}
}
public function commit()
{
global $globals;
- $email = $this->m_bestalias . '@' . $globals->mail->domain;
+ $email = $this->m_user->bestEmail();
- XDB::execute("UPDATE emails AS e
- INNER JOIN aliases AS a ON (a.id = e.uid)
- SET e.flags = 'active', panne_level = 2
- WHERE a.alias = {?} AND e.email = {?}", $this->m_forlife, $this->m_email);
+ XDB::execute("UPDATE emails
+ SET flags = 'active', panne_level = 2
+ WHERE uid = {?} AND email = {?}", $this->m_user->id(), $this->m_email);
if (XDB::affectedRows() > 0) {
$this->m_reactive = true;
$mailer = new PlMailer();
$mailer->setFrom('"Association Polytechnique.org" <register@' . $globals->mail->domain . '>');
$mailer->addTo($email);
- $mailer->setSubject("Mise à jour de ton adresse $email");
+ $mailer->setSubject("Mise à jour de ton adresse {$email}");
$mailer->setTxtBody(wordwrap("Cher Camarade,\n\n"
- . "Ton adresse $email étant en panne et ayant été informés que ta redirection {$this->m_email}, jusqu'à présent inactive, "
- . "est fonctionnelle, nous venons de réactiver cette adresse.\n\n"
- . "N'hésite pas à aller gérer toi-même tes redirections en te rendant à la page :\n"
- . "https://www.polytechnique.org/emails/redirect\n"
- . "Si tu as perdu ton mot de passe d'accès au site, tu peux également effectuer la procédure de récupération à l'adresse :\n"
- . "https://www.polytechnique.org/recovery\n\n"
- . "-- \nTrès Cordialement,\nL'Équipe de Polytechnique.org\n"));
+ . "Ton adresse {$email} étant en panne et ayant été informés que ta redirection {$this->m_email}, jusqu'à présent inactive, "
+ . "est fonctionnelle, nous venons de réactiver cette adresse.\n\n"
+ . "N'hésite pas à aller gérer toi-même tes redirections en te rendant à la page :\n"
+ . "https://www.polytechnique.org/emails/redirect\n"
+ . "Si tu as perdu ton mot de passe d'accès au site, tu peux également effectuer la procédure de récupération à l'adresse :\n"
+ . "https://www.polytechnique.org/recovery\n\n"
+ . "-- \nTrès Cordialement,\nL'Équipe de Polytechnique.org\n"));
$mailer->send();
return true;
}
- $email = $this->m_bestalias . '@' . $globals->mail->domain;
- if ($this->old_email) {
+ if ($this->m_user->email) {
$subject = "Ton adresse $email semble ne plus fonctionner";
$reason = "Nous avons été informés que ton adresse $email ne fonctionne plus correctement par un camarade";
} else {
- $res = XDB::iterRow("SELECT email
- FROM emails AS e
- INNER JOIN aliases AS a ON (a.id = e.uid)
- WHERE a.alias = {?} AND e.flags = 'panne'", $this->m_forlife);
+ $res = XDB::iterRow("SELECT email FROM emails WHERE uid = {?} AND flags = 'panne'", $this->m_user->id());
$redirect = array();
while (list($red) = $res->next()) {
list(, $redirect[]) = explode('@', $red);
. ' sont hors-services depuis plusieurs mois.';
}
}
- $body = ($this->m_sexe ? 'Chère ' : 'Cher ') . $this->m_prenom . ",\n\n"
+ $body = ($this->m_user->isFemale() ? 'Chère ' : 'Cher ') . $this->m_user->displayName() . ",\n\n"
. $reason . "\n\n"
. "L'adresse {$this->m_email} nous a été communiquée, veux-tu que cette adresse devienne ta nouvelle "
. "adresse de redirection ? Si oui, envoie nous des informations qui "
// }}}
// {{{ constructor
- public function __construct($_titre, $_texte, $_pmin, $_pmax, $_peremption, $_comment, $_uid, PlUpload &$upload = null)
+ public function __construct($_titre, $_texte, $_pmin, $_pmax, $_peremption, $_comment, User &$_user, PlUpload &$upload = null)
{
- parent::__construct($_uid, false, 'evts');
+ parent::__construct($_user, false, 'evts');
$this->titre = $_titre;
$this->texte = $_texte;
$this->pmin = $_pmin;
$this->pmax = Env::i('promo_max');
$this->peremption = Env::v('peremption');
if (@$_FILES['image']['tmp_name']) {
- $upload = PlUpload::get($_FILES['image'], S::v('forlife'), 'event');
+ $upload = PlUpload::get($_FILES['image'], S::user()->login(), 'event');
if (!$upload) {
$this->trigError("Impossible de télécharger le fichier");
} elseif (!$upload->isType('image')) {
if (XDB::execute("INSERT INTO evenements
SET user_id = {?}, creation_date=NOW(), titre={?}, texte={?},
peremption={?}, promo_min={?}, promo_max={?}, flags=CONCAT(flags,',valide,wiki')",
- $this->uid, $this->titre, $this->texte,
+ $this->user->id(), $this->titre, $this->texte,
$this->peremption, $this->pmin, $this->pmax)) {
$eid = XDB::insertId();
if ($this->img) {
}
global $globals;
if ($globals->banana->event_forum) {
- require_once 'user.func.inc.php';
- $forlife = get_user_forlife($this->uid);
require_once 'banana/forum.inc.php';
- $banana = new ForumsBanana($forlife);
+ $banana = new ForumsBanana($this->user);
$post = $banana->post($globals->banana->event_forum,
$globals->banana->event_reply,
$this->titre, MiniWiki::wikiToText($this->texte, false, 0, 80));
alors la raison s'affichera (mais seulement 24-48h après la suspension).
Si l'utilisateur a désactivé lui-même son compte, la raison sera toujours vierge.";
- public function __construct($_uid)
+ public function __construct(User &$_user)
{
- parent::__construct($_uid, true, 'gapps-unsuspend');
+ parent::__construct($_user, true, 'gapps-unsuspend');
}
public function sendmail($isok)
public function commit()
{
require_once dirname(__FILE__) . '/../googleapps.inc.php';
- $account = new GoogleAppsAccount($this->uid, $this->forlife);
+ $account = new GoogleAppsAccount($this->user);
return $account->do_unsuspend();
}
"SELECT g_suspension
FROM gapps_accounts
WHERE g_account_name = {?}",
- $this->forlife);
+ $this->user->login());
return $res->fetchOneCell();
}
}
public $warning = true;
- public $homonymes_forlife;
+ public $homonymes_hruid;
public $rules = "Accepter, sauf cas particulier d'utilisateur dont l'homonymie est traité plus ... manuellement";
// }}}
// {{{ constructor
- public function __construct($_uid, $_loginbis, $_homonymes_forlife, $warning=true)
+ public function __construct(User &$_user, $_loginbis, $_homonymes_hruid, $warning=true)
{
$this->warning = $warning;
- parent::__construct($_uid, true, $this->title());
+ parent::__construct($_user, true, $this->title());
$this->refuse = false;
$this->loginbis = $_loginbis;
- $this->homonymes_forlife = $_homonymes_forlife;
+ $this->homonymes_hruid = $_homonymes_hruid;
}
// }}}
private function title()
{
- return $this->warning?'alerte alias':'robot répondeur';
+ return ($this->warning ? 'alerte alias' : 'robot répondeur');
}
// }}}
protected function _mail_subj()
{
global $globals;
- return "[Polytechnique.org/Support] ".($this->warning?"Dans une semaine : suppression de l'alias":"Mise en place du robot")." $loginbis@" . $globals->mail->domain;
+ return "[Polytechnique.org/Support] "
+ . ($this->warning ? "Dans une semaine : suppression de l'alias " : "Mise en place du robot")
+ . " $loginbis@" . $globals->mail->domain;
}
// }}}
Comme nous t'en avons informé par email il y a quelques temps,
pour respecter nos engagements en terme d'adresses email devinables,
tu te verras bientôt retirer l'alias ".$this->loginbis."@".$globals->mail->domain." pour
-ne garder que ".$this->forlife."@".$globals->mail->domain.".
+ne garder que " . $this->user->forlifeEmail() . ".
Toute personne qui écrira à ".$this->loginbis."@".$globals->mail->domain." recevra la
réponse d'un robot qui l'informera que ".$this->loginbis."@".$globals->mail->domain."
if (!$isok) return false;
global $globals;
$mailer = new PlMailer;
- $cc = "support+homonyme@".$globals->mail->domain;
- $FROM = "\"Support Polytechnique.org\" <$cc>";
+ $cc = "support+homonyme@" . $globals->mail->domain;
+ $from = "\"Support Polytechnique.org\" <$cc>";
$mailer->setSubject($this->_mail_subj());
- $mailer->setFrom($FROM);
- $mailer->addTo("\"{$this->prenom} {$this->nom}\" <{$this->bestalias}@{$globals->mail->domain}>");
+ $mailer->setFrom($from);
+ $mailer->addTo("\"{$this->user->fullName()}\" <{$this->user->bestEmail()}>");
$mailer->addCc($cc);
- $body = $this->prenom.",\n\n"
+ $body = $this->user->displayName() . ",\n\n"
. $this->_mail_body($isok)
. (Env::has('comm') ? "\n\n".Env::v('comm') : '')
. "\n\nCordialement,\n\n-- \nL'équipe de Polytechnique.org\n";
{
require_once('homonymes.inc.php');
- switch_bestalias($this->uid, $this->loginbis);
+ switch_bestalias($this->user->id(), $this->loginbis);
if (!$this->warning) {
- XDB::execute("UPDATE aliases SET type='homonyme',expire=NOW() WHERE alias={?}", $this->loginbis);
- XDB::execute("REPLACE INTO homonymes (homonyme_id,user_id) VALUES({?},{?})", $this->uid, $this->uid);
+ XDB::execute("UPDATE aliases SET type = 'homonyme', expire = NOW() WHERE alias = {?}", $this->loginbis);
+ XDB::execute("REPLACE INTO homonymes (homonyme_id, user_id) VALUES({?}, {?})", $this->user->id(), $this->user->id());
}
return true;
// }}}
// {{{ constructor
- public function __construct($_uid, $_asso, $_liste, $_domain, $_desc, $_advertise,
+ public function __construct(User &$_user, $_asso, $_liste, $_domain, $_desc, $_advertise,
$_modlevel, $_inslevel, $_owners, $_members, $_stamp=0)
{
- parent::__construct($_uid, false, 'liste', $_stamp);
+ parent::__construct($_user, false, 'liste', $_stamp);
$this->asso = $_asso;
$this->liste = $_liste;
return 1;
}
- $list = new MMList(S::v('uid'), S::v('password'), $this->domain);
+ $list = new MMList(S::user()->id(), S::v('password'), $this->domain);
$ret = $list->create_list($this->liste, utf8_decode($this->desc), $this->advertise,
$this->modlevel, $this->inslevel,
$this->owners, $this->members);
public $perso;
- public $m_id;
+ public $m_user;
public $m_email;
- public $m_nom;
- public $m_prenom;
- public $m_promo;
public $m_relance;
public $m_type;
public $m_data;
// }}}
// {{{ constructor
- public function __construct($sender, $mark_id, $email, $perso, $type, $data)
+ public function __construct(User &$sender, User &$mark, $email, $perso, $type, $data)
{
parent::__construct($sender, false, 'marketing');
- $this->m_id = $mark_id;
+ $this->m_user = &$mark;
$this->m_email = $email;
$this->perso = $perso;
$this->m_type = $type;
$this->m_data = $data;
-
- $res = XDB::query('SELECT u.nom, u.prenom, u.promo
- FROM auth_user_md5 AS u
- WHERE user_id = {?}
- GROUP BY u.user_id', $mark_id);
- list ($this->m_nom, $this->m_prenom, $this->m_promo) = $res->fetchOneRow();
}
// }}}
LEFT JOIN register_pending AS p ON p.uid = u.user_id
LEFT JOIN register_marketing AS m ON m.uid = u.user_id
WHERE user_id = {?}',
- $this->m_id);
+ $this->m_user->id());
$this->m_relance = $res->fetchOneCell();
return 'include/form.valid.mark.tpl';
}
protected function _mail_subj()
{
- return "[Polytechnique.org] Marketing de {$this->m_prenom} {$this->m_nom} ({$this->m_promo})";
+ return "[Polytechnique.org] Marketing de {$this->m_user->fullName()} ({$this->m_user->promo()})";
}
// }}}
{
if ($isok) {
return " Un email de marketing vient d'être envoyé "
- .($this->perso ? 'en ton nom' : 'en notre nom')
- ." à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) pour l'encourager à s'inscrire !\n\n"
- ."Merci de ta participation !\n";
+ . ($this->perso ? 'en ton nom' : 'en notre nom')
+ . " à {$this->m_user->fullName()} ({$this->m_user->promo()}) "
+ . "pour l'encourager à s'inscrire !\n\n"
+ . "Merci de ta participation !\n";
} else {
- return " Nous n'avons pas jugé bon d'envoyer d'email de marketing à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}).";
+ return " Nous n'avons pas jugé bon d'envoyer d'email de marketing à "
+ . "{$this->m_user->fullName()} ({$this->m_user->promo()}).";
}
}
public function commit()
{
- $market = Marketing::get($this->m_id, $this->m_email);
+ $market = Marketing::get($this->m_user->id(), $this->m_email);
if ($market == null) {
return false;
}
// }}}
// {{{ constructor
- public function __construct($_uid, $_idmedal, $_subidmedal, $_stamp=0)
+ public function __construct(User &$_user, $_idmedal, $_subidmedal, $_stamp=0)
{
- parent::__construct($_uid, false, 'medal', $_stamp);
- $this->mid = $_idmedal;
+ parent::__construct($_user, false, 'medal', $_stamp);
+ $this->mid = $_idmedal;
$this->gid = $_subidmedal;
}
public function commit ()
{
require_once 'notifs.inc.php';
- register_watch_op($this->uid, WATCH_FICHE, '', 'medals');
+ register_watch_op($this->user->id(), WATCH_FICHE, '', 'medals');
return XDB::execute('REPLACE INTO profile_medals_sub
VALUES ({?}, {?}, {?})',
- $this->uid, $this->mid, $this->gid);
+ $this->user->id(), $this->mid, $this->gid);
}
// }}}
// }}}
// {{{ constructor
- public function __construct($uid, $title, $body, $append)
+ public function __construct(User &$_user, $_title, $_body, $_append)
{
- parent::__construct($uid, false, 'nl');
- $this->art = new NLArticle($title, $body, $append);
+ parent::__construct($_user, false, 'nl');
+ $this->art = new NLArticle($_title, $_body, $_append);
}
// }}}
// }}}
// {{{ constructor
- public function __construct($_uid, $_usage, $_reason)
+ public function __construct(User &$_user, $_usage, $_reason)
{
- parent::__construct($_uid, true, 'usage');
- $this->nom_usage = $_usage;
+ parent::__construct($_user, true, 'usage');
+ $this->nom_usage = $_usage;
$this->reason = $_reason;
- $this->alias = make_username($this->prenom, $this->nom_usage);
- if (!$this->nom_usage) $this->alias = "";
+
+ $res = XDB::query("SELECT prenom FROM auth_user_md5 WHERE user_id = {?}", $this->user->id());
+ $this->alias = make_username($res->fetchOneCell(), $this->nom_usage);
+ if (!$this->nom_usage) {
+ $this->alias = "";
+ }
$res = XDB::query("
SELECT e.alias, u.nom_usage, a.id
FROM auth_user_md5 as u
LEFT JOIN aliases as e ON(e.type='alias' AND FIND_IN_SET('usage',e.flags) AND e.id = u.user_id)
LEFT JOIN aliases as a ON(a.alias = {?} AND a.id != u.user_id)
- WHERE u.user_id = {?}", $this->alias, $this->uid);
+ WHERE u.user_id = {?}", $this->alias, $this->user->id());
list($this->oldalias, $this->oldusage, $this->homonyme) = $res->fetchOneRow();
}
}
if ($globals->mailstorage->googleapps_domain) {
require_once 'googleapps.inc.php';
- $account = new GoogleAppsAccount($this->uid, $this->forlife);
+ $account = new GoogleAppsAccount($this->user);
if ($account->active()) {
$res .= "\n\n Si tu utilises Google Apps, tu peux changer ton nom d'usage sur https://mail.google.com/a/polytechnique.org/#settings/accounts";
}
public function commit()
{
require_once 'notifs.inc.php';
- register_watch_op($this->uid, WATCH_FICHE, '', 'nom');
+ register_watch_op($this->user->id(), WATCH_FICHE, '', 'nom');
require_once('user.func.inc.php');
- $this->bestalias = set_new_usage($this->uid, $this->nom_usage, $this->alias);
+ set_new_usage($this->user->id(), $this->nom_usage, $this->alias);
return true;
}
public $unique = true;
- public $promo;
public $promo_sortie;
public $rules = "A priori accepter (la validation sert à repousser les
// }}}
// {{{ constructor
- public function __construct($_uid, $_sortie)
+ public function __construct(User &$_user, $_sortie)
{
- parent::__construct($_uid, true, 'orange');
+ parent::__construct($_user, true, 'orange');
$this->promo_sortie = $_sortie;
- $res = XDB::query("SELECT promo FROM auth_user_md5 WHERE user_id = {?}", $_uid);
- $this->promo = $res->fetchOneCell();
+ $res = XDB::query("SELECT promo FROM auth_user_md5 WHERE user_id = {?}", $_user->id());
}
// }}}
public function commit()
{
- XDB::execute("UPDATE auth_user_md5 set promo_sortie={?} WHERE user_id={?}",$this->promo_sortie ,$this->uid);
+ XDB::execute("UPDATE auth_user_md5 set promo_sortie = {?} WHERE user_id = {?}",$this->promo_sortie, $this->user->id());
return true;
}
// }}}
// {{{ constructor
- public function __construct($_uid, $_intitule, $_site, $_montant, $_msg,
+ public function __construct(User &$_user, $_intitule, $_site, $_montant, $_msg,
$_montantmin=0, $_montantmax=999, $_asso_id = 0,
$_evt = 0, $_stamp=0)
{
- parent::__construct($_uid, false, 'paiements', $_stamp);
+ parent::__construct($_user, false, 'paiements', $_stamp);
$this->titre = $_intitule;
$this->site = $_site;
public function commit()
{
- global $globals;
$res = XDB::query("SELECT MAX(id) FROM paiement.paiements");
$id = $res->fetchOneCell()+1;
$ret = XDB::execute("INSERT INTO paiement.paiements VALUES
",
$id, $this->titre, $this->site,
$this->montant, $this->montant_min, $this->montant_max,
- $this->bestalias."@".$globals->mail->domain, $this->msg_reponse, $this->asso_id);
+ $this->user->bestEmail(), $this->msg_reponse, $this->asso_id);
if ($this->asso_id && $this->evt) {
XDB::execute("UPDATE groupex.evenements
SET paiement_id = {?}
// }}}
// {{{ constructor
- public function __construct($_uid, PlUpload &$upload, $_stamp=0)
+ public function __construct(User &$_user, PlUpload &$upload, $_stamp=0)
{
- parent::__construct($_uid, true, 'photo', $_stamp);
+ parent::__construct($_user, true, 'photo', $_stamp);
$this->read($upload);
}
static public function get_request($uid)
{
- return parent::get_typed_request($uid,'photo');
+ return parent::get_typed_request($uid, 'photo');
}
// }}}
protected function handle_editor()
{
if (isset($_FILES['userfile'])) {
- $upload =& PlUpload::get($_FILES['userfile'], S::v('forlife'), 'photo');
+ $upload =& PlUpload::get($_FILES['userfile'], S::user()->login(), 'photo');
if (!$upload) {
$this->trigError('Une erreur est survenue lors du téléchargement du fichier');
return false;
require_once 'notifs.inc.php';
XDB::execute('REPLACE INTO photo (uid, attachmime, attach, x, y)
VALUES ({?},{?},{?},{?},{?})',
- $this->uid, $this->mimetype, $this->data, $this->x, $this->y);
- register_watch_op($this->uid, WATCH_FICHE, '', 'photo');
+ $this->user->id(), $this->mimetype, $this->data, $this->x, $this->y);
+ register_watch_op($this->user->id(), WATCH_FICHE, '', 'photo');
return true;
}
// }}}
// {{{ constructor
- public function __construct($_title, $_description, $_end, $_mode, $_promos, $_questions, $_uid)
+ public function __construct($_title, $_description, $_end, $_mode, $_promos, $_questions, User &$_user)
{
- parent::__construct($_uid, false, 'surveys');
+ parent::__construct($_user, false, 'surveys');
$this->title = $_title;
$this->description = $_description;
$this->end = $_end;
end={?},
mode={?},
promos={?}';
- return XDB::execute($sql, serialize($this->questions), $this->title, $this->description, $this->uid, $this->end, $this->mode, $this->promos);
+ return XDB::execute($sql, serialize($this->questions), $this->title, $this->description, $this->user->id(), $this->end, $this->mode, $this->promos);
}
// }}}
public function addUser($user)
{
- $forlife = get_user_forlife($user, '_silent_user_callback');
- if ($forlife) {
- $this->user_list[] = get_user_forlife($user);
+ $user = User::getSilent($user);
+ if ($user) {
+ $this->user_list[] = $user;
$this->count++;
}
}
{
global $globals;
$login = $entry['value'];
- $user = get_user_details($login);
+ $user = get_user_details($login->login());
if (empty($user['nom_usage'])) {
$entry = new PlVCardEntry($user['prenom'], $user['nom'], null, null, @$user['nickname']);
// Photo
if ($this->photos) {
$res = XDB::query(
- "SELECT attach, attachmime
- FROM photo AS p
- INNER JOIN aliases AS a ON (a.id = p.uid AND a.type = 'a_vie')
- WHERE a.alias = {?}", $login);
+ "SELECT attach, attachmime
+ FROM photo AS p
+ WHERE u.user_id = {?}", $login->id());
if ($res->numRows()) {
list($data, $type) = $res->fetchOneRow();
$entry->setPhoto($data, strtoupper($type));
'$GUIButtonDirUrlFmt/table.gif"$[Table]"');
// set default author
-$Author = $_SESSION['forlife'].'|'.$_SESSION['prenom'].' '.$_SESSION['nom'];
+$Author = $_SESSION['hruid'].'|'.$_SESSION['prenom'].' '.$_SESSION['nom'];
$InputTags['e_form'] = array(
':html' => "<form action='{\$PageUrl}?action=edit' method='post'><div><input
$page->changeTpl('admin/utilisateurs.tpl');
$page->setTitle('Administration - Edit/Su/Log');
require_once("emails.inc.php");
- require_once("user.func.inc.php");
if (S::has('suid')) {
$page->kill("Déjà en SUID !!!");
}
- if (Env::has('user_id')) {
- $login = get_user_forlife(Env::i('user_id'));
- if (empty($login)) {
- $login = Env::i('user_id');
- }
- } elseif (Env::has('login')) {
- $login = get_user_forlife(Env::v('login'));
+ // Loads the user identity using the environment.
+ if ($login) {
+ $user = User::get($login);
+ } else if (Env::has('user_id')) {
+ $user = User::get(Env::i('user_id'));
+ } else if (Env::has('login')) {
+ $user = User::get(Env::v('login'));
}
- if(Env::has('logs_button') && $login) {
- pl_redirect("admin/logger?loguser=$login&year=".date('Y')."&month=".date('m'));
+ if ($user) {
+ $login = $user->login();
+ $registered = ($user->forlifeEmail() != null);
+ } else {
+ return;
}
- if (Env::has('ax_button') && $login) {
- pl_redirect("admin/synchro_ax/$login");
+ // Handles specific requests (AX sync, su, ...).
+ if(Env::has('logs_button') && $registered) {
+ pl_redirect("admin/logger?loguser=$login&year=".date('Y')."&month=".date('m'));
}
- if(Env::has('suid_button') && $login) {
- S::logger()->log("suid_start", "login by ".S::v('forlife'));
- $r = XDB::query("SELECT id
- FROM aliases
- WHERE alias={?}", $login);
- if($uid = $r->fetchOneCell()) {
- if (!Platal::session()->startSUID($uid)) {
- $page->trigError('Impossible d\'effectuer un SUID sur ' . $uid);
- } else {
- $page->kill("coucou");
- pl_redirect("");
- }
- }
+ if (Env::has('ax_button') && $registered) {
+ pl_redirect("admin/synchro_ax/" . $user->login());
}
- if ($login) {
- if (is_numeric($login)) {
- $r = XDB::query("SELECT *, a.alias AS forlife,
- FIND_IN_SET('watch', u.flags) AS watch, FIND_IN_SET('femme', u.flags) AS sexe,
- (year(naissance) > promo - 15 or year(naissance) < promo - 25) AS naiss_err
- FROM auth_user_md5 AS u
- LEFT JOIN aliases AS a ON (a.id = u.user_id AND type= 'a_vie')
- WHERE u.user_id = {?}", $login);
+ if(Env::has('suid_button') && $registered) {
+ S::logger()->log("suid_start", "login on " . $user->login());
+ if (!Platal::session()->startSUID($user->id())) {
+ $page->trigError('Impossible d\'effectuer un SUID sur ' . $user->id());
} else {
- $r = XDB::query("SELECT *, a.alias AS forlife,
- FIND_IN_SET('watch', u.flags) AS watch, FIND_IN_SET('femme', u.flags) AS sexe,
- (year(naissance) > promo - 15 or year(naissance) < promo - 25) AS naiss_err
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON ( a.id = u.user_id AND a.alias={?} AND type!='homonyme' )", $login);
+ pl_redirect("");
}
- $mr = $r->fetchOneAssoc();
+ }
- // Checks the user has a forlife, as non-registered user can't have redirections.
- if ($mr['forlife']) {
- $redirect = new Redirect($mr['user_id']);
- }
+ // Fetches user data.
+ $userinfo_query = "SELECT *, FIND_IN_SET('watch', flags) AS watch, FIND_IN_SET('femme', flags) AS sexe,
+ (year(naissance) > promo - 15 or year(naissance) < promo - 25) AS naiss_err
+ FROM auth_user_md5
+ WHERE user_id = {?}";
+ $mr = XDB::query($userinfo_query, $user->id())->fetchOneAssoc();
+ $redirect = ($registered ? new Redirect($user) : null);
- // Check if there was a submission
- foreach($_POST as $key => $val) {
- S::assert_xsrf_token();
+ // Processes admin requests, if any.
+ foreach($_POST as $key => $val) {
+ S::assert_xsrf_token();
- switch ($key) {
- case "add_fwd":
- $email = trim(Env::v('email'));
- if (!isvalid_email_redirection($email)) {
- $page->trigError("Email non valide: $email");
- } else {
- $redirect->add_email($email);
- $page->trigSuccess("Ajout de $email effectué");
- }
- break;
+ switch ($key) {
+ // Email redirection actions.
+ case "add_fwd":
+ $email = trim(Env::v('email'));
+ if (!isvalid_email_redirection($email)) {
+ $page->trigError("Email non valide: $email");
+ } else {
+ $redirect->add_email($email);
+ $page->trigSuccess("Ajout de $email effectué");
+ }
+ break;
- case "del_fwd":
- if (!empty($val)) {
- $redirect->delete_email($val);
- }
- break;
+ case "del_fwd":
+ if (!empty($val)) {
+ $redirect->delete_email($val);
+ }
+ break;
- case "del_alias":
- if (!empty($val)) {
- XDB::execute("DELETE FROM aliases
- WHERE id={?} AND alias={?}
- AND type!='a_vie' AND type!='homonyme'", $mr['user_id'], $val);
- XDB::execute("UPDATE emails
- SET rewrite = ''
- WHERE uid = {?} AND rewrite LIKE CONCAT({?}, '@%')",
- $mr['user_id'], $val);
- fix_bestalias($mr['user_id']);
- $page->trigSuccess($val." a été supprimé");
- }
- break;
- case "activate_fwd":
- if (!empty($val)) {
- $redirect->modify_one_email($val, true);
- }
- break;
- case "deactivate_fwd":
- if (!empty($val)) {
- $redirect->modify_one_email($val, false);
- }
- break;
- case "disable_fwd":
- $redirect->disable();
- break;
- case "enable_fwd":
- $redirect->enable();
- break;
- case "clean_fwd":
- if (!empty($val)) {
- $redirect->clean_errors($val);
- }
- break;
- case "add_alias":
- global $globals;
- $alias = trim(Env::v('email'));
- if (strpos($alias, '@') !== false) {
- list($alias, $domain) = explode('@', $alias);
+ case "activate_fwd":
+ if (!empty($val)) {
+ $redirect->modify_one_email($val, true);
+ }
+ break;
+ case "deactivate_fwd":
+ if (!empty($val)) {
+ $redirect->modify_one_email($val, false);
+ }
+ break;
+ case "disable_fwd":
+ $redirect->disable();
+ break;
+ case "enable_fwd":
+ $redirect->enable();
+ break;
+ case "clean_fwd":
+ if (!empty($val)) {
+ $redirect->clean_errors($val);
+ }
+ break;
+
+ // Alias actions.
+ case "add_alias":
+ global $globals;
+
+ // Splits new alias in user and fqdn.
+ $alias = trim(Env::v('email'));
+ if (strpos($alias, '@') !== false) {
+ list($alias, $domain) = explode('@', $alias);
+ } else {
+ $domain = $globals->mail->domain;
+ }
+
+ // Checks for alias' user validity.
+ if (!preg_match('/[-a-z0-9\.]+/s', $alias)) {
+ $page->trigError("'$alias' n'est pas un alias valide");
+ }
+
+ // Eventually adds the alias to the right domain.
+ if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) {
+ $req = new AliasReq($user, $alias, 'Admin request', false);
+ if ($req->commit()) {
+ $page->trigSuccess("Nouvel alias '$alias@$domain' attribué");
} else {
- $domain = $globals->mail->domain;
- }
- if (!preg_match('/[-a-z0-9\.]+/s', $alias)) {
- $page->trigError("'$alias' n'est pas un alias valide");
+ $page->trigError("Impossible d'ajouter l'alias '$alias@$domain', il est probablement déjà attribué");
}
- if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) {
- $req = new AliasReq($mr['user_id'], $alias, 'Admin request', false);
- if ($req->commit()) {
- $page->trigSuccess("Nouvel alias '$alias@$domain' attribué");
- } else {
- $page->trigError("Impossible d'ajouter l'alias '$alias@$domain', il est probablement déjà attribué");
- }
- } elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
- if (XDB::execute("INSERT INTO aliases (id,alias,type) VALUES ({?}, {?}, 'alias')",
- $mr['user_id'], $alias)) {
- $page->trigSuccess("Nouvel alias '$alias' ajouté");
- } else {
- $page->trigError("Impossible d'ajouter l'alias '$alias', il est probablement déjà attribué");
- }
+ } elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
+ $res = XDB::execute("INSERT INTO aliases (id,alias,type) VALUES ({?}, {?}, 'alias')",
+ $user->id(), $alias);
+ if ($res) {
+ $page->trigSuccess("Nouvel alias '$alias' ajouté");
} else {
- $page->trigError("Le domaine '$domain' n'est pas valide");
+ $page->trigError("Impossible d'ajouter l'alias '$alias', il est probablement déjà attribué");
}
- break;
+ } else {
+ $page->trigError("Le domaine '$domain' n'est pas valide");
+ }
+ break;
- case "best":
- // 'bestalias' is the first bit of the set : 1
- // 255 is the max for flags (8 sets max)
- XDB::execute("UPDATE aliases SET flags= flags & (255 - 1) WHERE id={?}", $mr['user_id']);
- XDB::execute("UPDATE aliases
- SET flags= flags | 1
- WHERE id={?} AND alias={?}", $mr['user_id'], $val);
- break;
+ case "del_alias":
+ if (!empty($val)) {
+ XDB::execute("DELETE FROM aliases
+ WHERE id = {?} AND alias = {?} AND
+ type NOT IN ('a_vie', 'homonyme')",
+ $user->id(), $val);
+ XDB::execute("UPDATE emails
+ SET rewrite = ''
+ WHERE uid = {?} AND rewrite LIKE CONCAT({?}, '@%')",
+ $user->id(), $val);
+ fix_bestalias($user);
+ $page->trigSuccess("L'alias '$val' a été supprimé");
+ }
+ break;
+ case "best":
+ XDB::execute("UPDATE aliases
+ SET flags = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', flags, ','), ',bestalias,', ','))
+ WHERE id = {?}", $user->id());
+ XDB::execute("UPDATE aliases
+ SET flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
+ WHERE id = {?} AND alias = {?}", $user->id(), $val);
+
+ // As having a non-null bestalias value is critical in
+ // plat/al's code, we do an a posteriori check on the
+ // validity of the bestalias.
+ fix_bestalias($user);
+ break;
- // Editer un profil
- case "u_edit":
- require_once('secure_hash.inc.php');
- $pass_encrypted = Env::v('newpass_clair') != "********" ? hash_encrypt(Env::v('newpass_clair')) : Env::v('passw');
- $naiss = Env::v('naissanceN');
- $deces = Env::v('decesN');
- $perms = Env::v('permsN');
- $prenm = Env::v('prenomN');
- $nom = Env::v('nomN');
- $nomusage = Env::v('nomusageN');
- $promo = Env::i('promoN');
- $sexe = Env::v('sexeN');
- $comm = trim(Env::v('commentN'));
- $watch = Env::v('watchN');
- $flags = '';
- if ($sexe) {
- $flags = 'femme';
- }
- if ($watch) {
- if ($flags) {
- $flags .= ',';
- }
- $flags .= 'watch';
- }
+ // Profile edition.
+ case "u_edit":
+ // Loads new values from environment.
+ require_once('secure_hash.inc.php');
+ $pass_encrypted = Env::v('newpass_clair') != "********" ? hash_encrypt(Env::v('newpass_clair')) : Env::v('passw');
+ $naiss = Env::v('naissanceN');
+ $deces = Env::v('decesN');
+ $perms = Env::v('permsN');
+ $prenom = Env::v('prenomN');
+ $nom = Env::v('nomN');
+ $nomusage = Env::v('nomusageN');
+ $promo = Env::i('promoN');
+ $sexe = Env::v('sexeN');
+ $comm = trim(Env::v('commentN'));
+ $watch = Env::v('watchN');
+
+ $flags = ($sexe ? 'femme' : '');
+ if ($watch) {
+ $flags .= ($flags ? ',watch' : 'watch');
+ }
+ if ($watch && !$comm) {
+ $page->trigError("Il est nécessaire de mettre un commentaire pour surveiller un compte");
+ break;
+ }
- if ($watch && !$comm) {
- $page->trigError("Il est nécessaire de mettre un commentaire pour surveiller un compte");
- break;
- }
+ // Fetches fields to watch for changes.
+ $watch_query = "SELECT naissance, deces, password, perms, nom_usage,
+ prenom, nom, flags, promo, comment
+ FROM auth_user_md5
+ WHERE user_id = {?}";
+ $old_fields = XDB::query($watch_query, $user->id())->fetchOneAssoc();
+
+ // If user was newly banned, we need to ensure her php session
+ // is killed. This hack is ugly (and largely overkill); it should
+ // however suits our needs.
+ if ($perms == 'disabled' && $old_fields['perms'] != 'disabled') {
+ kill_sessions();
+ }
- $watch = 'SELECT naissance, deces, password, perms, nom_usage,
- prenom, nom, flags, promo, comment
- FROM auth_user_md5
- WHERE user_id = ' . $mr['user_id'];
- $res = XDB::query($watch);
- $old_fields = $res->fetchOneAssoc();
- $query = "UPDATE auth_user_md5 SET
- naissance = '$naiss',
- deces = '$deces',
- password = '$pass_encrypted',
- perms = '$perms',
- prenom = '".addslashes($prenm)."',
- nom = '".addslashes($nom)."',
- nom_usage = '".addslashes($nomusage)."',
- flags = '$flags',
- promo = $promo,
- comment = '".addslashes($comm)."'
- WHERE user_id = '{$mr['user_id']}'";
- if ($perms == 'disabled' && $old_fields['perms'] != 'disabled') {
- // A user has been banned ==> ensure his php session has been killed
- // This solution is ugly and overkill, but, it should be efficient.
- kill_sessions();
- }
- if (XDB::execute($query)) {
- user_reindex($mr['user_id']);
+ // Updates the user profile with the new values.
+ $res = XDB::execute("UPDATE auth_user_md5
+ SET naissance = {?}, deces = {?}, password = {?},
+ perms = {?}, prenom = {?}, nom = {?}, nom_usage = {?},
+ flags = {?}, promo = {?}, comment = {?}
+ WHERE user_id = {?}",
+ $naiss, $deces, $pass_encrypted,
+ $perms, $prenom, $nom, $nomusage,
+ $flags, $promo, $comm, $user->id());
+ if ($res) {
+ require_once("user.func.inc.php");
+ user_reindex($user->id());
+ $new_fields = XDB::query($watch_query, $user->id())->fetchOneAssoc();
- $res = XDB::query($watch);
- $new_fields = $res->fetchOneAssoc();
+ $mailer = new PlMailer("admin/useredit.mail.tpl");
+ $mailer->assign("admin", S::user()->login());
+ $mailer->assign("user", $user->login());
+ $mailer->assign('old', $old_fields);
+ $mailer->assign('new', $new_fields);
+ $mailer->send();
- $mailer = new PlMailer("admin/useredit.mail.tpl");
- $mailer->assign("admin", S::v('forlife'));
- $mailer->assign("user", $mr['forlife']);
- $mailer->assign('old', $old_fields);
- $mailer->assign('new', $new_fields);
- $mailer->send();
+ $globals->updateNbIns();
+ $page->trigSuccess("Update was successful.");
+ } else {
+ $page->trigError("Update failed, please double check your values.");
+ }
- // update number of subscribers (perms or deceased may have changed)
- $globals->updateNbIns();
+ // Checks for changes, and updates other tables of plat/al.
+ if (Env::v('nomusageN') != $mr['nom_usage']) {
+ set_new_usage($user->id(), Env::v('nomusageN'), make_username(Env::v('prenomN'), Env::v('nomusageN')));
+ }
+ if (Env::v('decesN') != $mr['deces']) {
+ require_once 'notifs.inc.php';
+ register_watch_op($user->id(), WATCH_DEATH, $mr['deces']);
+ user_clear_all_subs($user->id(), false);
+ }
- $page->trigSuccess("updaté correctement.");
- }
- if (Env::v('nomusageN') != $mr['nom_usage']) {
- set_new_usage($mr['user_id'], Env::v('nomusageN'), make_username(Env::v('prenomN'), Env::v('nomusageN')));
- }
- if (Env::v('decesN') != $mr['deces']) {
- require_once 'notifs.inc.php';
- register_watch_op($mr['user_id'], WATCH_DEATH, $mr['deces']);
- user_clear_all_subs($mr['user_id'], false);
- }
- $r = XDB::query("SELECT *, a.alias AS forlife,
- FIND_IN_SET('watch', u.flags) AS watch, FIND_IN_SET('femme', u.flags) AS sexe
- FROM auth_user_md5 AS u
- LEFT JOIN aliases AS a ON (a.id = u.user_id AND type= 'a_vie')
- WHERE u.user_id = {?}", $mr['user_id']);
- $mr = $r->fetchOneAssoc();
-
- // If GoogleApps is enabled, the user did choose to use synchronized passwords,
- // and the password was changed, updates the Google Apps password as well.
- if ($globals->mailstorage->googleapps_domain && Env::v('newpass_clair') != "********") {
+ // Eventually updates the Google Apps account.
+ if ($globals->mailstorage->googleapps_domain) {
+ // If the user did choose to use synchronized passwords,
+ // and the password was changed, updates the Google Apps
+ // password as well.
+ if (Env::v('newpass_clair') != "********") {
require_once 'googleapps.inc.php';
- $account = new GoogleAppsAccount($mr['user_id'], $mr['forlife']);
+ $account = new GoogleAppsAccount($user);
if ($account->active() && $account->sync_password) {
$account->set_password($pass_encrypted);
}
}
- // If GoogleApps is enabled, and the user is now disabled, disables the Google Apps account as well.
- if ($globals->mailstorage->googleapps_domain &&
- $new_fields['perms'] == 'disabled' &&
- $new_fields['perms'] != $old_fields['perms']) {
+ // If the update did disable the user account, disables
+ // the Google Apps account as well.
+ if ($new_fields['perms'] == 'disabled' && $new_fields['perms'] != $old_fields['perms']) {
require_once 'googleapps.inc.php';
- $account = new GoogleAppsAccount($mr['user_id'], $mr['forlife']);
+ $account = new GoogleAppsAccount($user);
$account->suspend();
}
- break;
+ }
- // DELETE FROM auth_user_md5
- case "u_kill":
- user_clear_all_subs($mr['user_id']);
- // update number of subscribers (perms or deceased may have changed)
- $globals->updateNbIns();
- $page->trigSuccess("'{$mr['user_id']}' a été désinscrit !");
- $mailer = new PlMailer("admin/useredit.mail.tpl");
- $mailer->assign("admin", S::v('forlife'));
- $mailer->assign("user", $mr['forlife']);
- $mailer->assign("deletion", true);
- $mailer->send();
- break;
- case "b_edit":
- XDB::execute("DELETE FROM forums.innd WHERE uid = {?}", $mr['user_id']);
- if (Env::v('write_perm') != "" || Env::v('read_perm') != "" || Env::v('commentaire') != "" ) {
- XDB::execute("INSERT INTO forums.innd
- SET ipmin = '0',
- ipmax = '4294967295',
- write_perm = {?},
- read_perm = {?},
- comment = {?},
- priority = '200',
- uid = {?}",
- Env::v('write_perm'), Env::v('read_perm'), Env::v('comment'), $mr['user_id']);
- }
- break;
- }
- }
+ // Reloads the user profile, to ensure the latest version will
+ // be served to the administrator.
+ $mr = XDB::query($userinfo_query, $user->id())->fetchOneAssoc();
+
+ break;
- $res = XDB::query("SELECT start, host
- FROM logger.sessions
- WHERE uid={?} AND suid=0
- ORDER BY start DESC
- LIMIT 1", $mr['user_id']);
- list($lastlogin,$host) = $res->fetchOneRow();
- $page->assign('lastlogin', $lastlogin);
- $page->assign('host', $host);
-
- $res = XDB::iterator("SELECT alias
- FROM virtual
- INNER JOIN virtual_redirect USING(vid)
- WHERE type = 'user' AND redirect LIKE '" . $mr['forlife'] . "@%'");
- $page->assign('virtuals', $res);
-
- $page->assign('aliases', XDB::iterator(
- "SELECT alias, type='a_vie' AS for_life,FIND_IN_SET('bestalias',flags) AS best,expire
- FROM aliases
- WHERE id = {?} AND type!='homonyme'
- ORDER BY type!= 'a_vie'", $mr["user_id"]));
- if ($mr['perms'] != 'pending' && isset($redirect)) {
- $page->assign('emails', $redirect->emails);
+ // User re-registration.
+ case "u_kill":
+ user_clear_all_subs($user->id());
+ $globals->updateNbIns();
+ $page->trigSuccess("'" . $user->id() . "' a été désinscrit !");
+
+ $mailer = new PlMailer("admin/useredit.mail.tpl");
+ $mailer->assign("admin", S::user()->login());
+ $mailer->assign("user", $user->login());
+ $mailer->assign("deletion", true);
+ $mailer->send();
+ break;
+
+ // Forum ban update.
+ case "b_edit":
+ XDB::execute("DELETE FROM forums.innd WHERE uid = {?}", $user->id());
+ if (Env::v('write_perm') != "" || Env::v('read_perm') != "" || Env::v('commentaire') != "" ) {
+ XDB::execute("INSERT INTO forums.innd
+ SET ipmin = '0', ipmax = '4294967295',
+ write_perm = {?}, read_perm = {?},
+ comment = {?}, priority = '200', uid = {?}",
+ Env::v('write_perm'), Env::v('read_perm'), Env::v('comment'), $user->id());
+ }
+ break;
}
+ }
+
+ // Displays last login and last host information.
+ $res = XDB::query("SELECT start, host
+ FROM logger.sessions
+ WHERE uid = {?} AND suid = 0
+ ORDER BY start DESC
+ LIMIT 1", $user->id());
+ list($lastlogin,$host) = $res->fetchOneRow();
+ $page->assign('lastlogin', $lastlogin);
+ $page->assign('host', $host);
+
+ // Display active aliases.
+ $page->assign('virtuals', XDB::iterator(
+ "SELECT alias
+ FROM virtual
+ INNER JOIN virtual_redirect USING (vid)
+ WHERE type = 'user' AND redirect LIKE CONCAT({?}, '@%')", $user->id()));
+
+ $page->assign('aliases', XDB::iterator(
+ "SELECT alias, type='a_vie' AS for_life,FIND_IN_SET('bestalias',flags) AS best,expire
+ FROM aliases
+ WHERE id = {?} AND type != 'homonyme'
+ ORDER BY type != 'a_vie'", $user->id()));
+
+ // Displays email redirection and the general profile.
+ if ($registered && $redirect) {
+ $page->assign('emails', $redirect->emails);
+ }
- $page->assign('mr',$mr);
+ $page->assign('mr', $mr);
+ $page->assign('user', $user);
- // Bans forums
- $res = XDB::query("SELECT write_perm, read_perm, comment
- FROM forums.innd
- WHERE uid = {?}", $mr['user_id']);
- $bans = $res->fetchOneAssoc();
- $page->assign('bans', $bans);
+ // Displays forum bans.
+ $res = XDB::query("SELECT write_perm, read_perm, comment
+ FROM forums.innd
+ WHERE uid = {?}", $user->id());
+ $bans = $res->fetchOneAssoc();
+ $page->assign('bans', $bans);
+ }
+
+ function getHruid($line, $key)
+ {
+ var_dump($line);
+ if (!isset($line['nom']) || !isset($line['prenom']) || !isset($line['promo'])) {
+ return null;
}
+ return make_forlife($line['prenom'], $line['nom'], $line['promo']);
}
function getMatricule($line, $key)
}
$importer = new CSVImporter('auth_user_md5', 'matricule');
- $importer->registerFunction('matricule', 'matricle Ecole vers X.org', array($this, 'getMatricule'));
+ $importer->registerFunction('matricule', 'matricule Ecole vers X.org', array($this, 'getMatricule'));
switch ($action) {
case 'add':
- $fields = array('nom', 'nom_ini', 'prenom', 'naissance_ini',
+ $fields = array('hruid', 'nom', 'nom_ini', 'prenom', 'naissance_ini',
'prenom_ini', 'promo', 'promo_sortie', 'flags',
'matricule', 'matricule_ax', 'perms');
+ $importer->forceValue('hruid', array($this, 'getHruid'));
$importer->forceValue('promo', $promo);
$importer->forceValue('promo_sortie', $promo + 3);
break;
$importer->apply($page, "admin/promo/$action/$promo", $fields);
}
- function handler_homonyms(&$page, $op = 'list', $target = null) {
+ function handler_homonyms(&$page, $op = 'list', $target = null)
+ {
$page->changeTpl('admin/homonymes.tpl');
$page->setTitle('Administration - Homonymes');
require_once("homonymes.inc.php");
$page->assign('dead', $res);
}
- function handler_synchro_ax(&$page, $user = null, $action = null) {
+ function handler_synchro_ax(&$page, $login = null, $action = null) {
$page->changeTpl('admin/synchro_ax.tpl');
$page->setTitle('Administration - Synchro AX');
+ // Checks for synchronization requirements.
require_once('synchro_ax.inc.php');
-
if (is_ax_key_missing()) {
$page->assign('no_private_key', true);
$page->run();
}
- require_once('user.func.inc.php');
-
- if ($user)
- $login = get_user_forlife($user);
-
- if (Env::has('user')) {
- $login = get_user_forlife(Env::v('user'));
- if ($login === false) {
- return;
- }
+ // Determines user identity using environment.
+ if ($login) {
+ $user = User::get($login);
+ } else if (Env::has('user')) {
+ $user = User::get(Env::v('user'));
+ } else if (Env::has('mat')) {
+ $res = XDB::query("SELECT user_id FROM auth_user_md5 WHERE matricule = {?}", Env::i('mat'));
+ $user = User::get($res->fetchOneCell());
+ } else {
+ return;
}
- if (Env::has('mat')) {
- $res = XDB::query(
- "SELECT alias
- FROM aliases AS a
- INNER JOIN auth_user_md5 AS u ON (a.id=u.user_id AND a.type='a_vie')
- WHERE matricule={?}", Env::i('mat'));
- $login = $res->fetchOneCell();
+ // Finally synchronizes the AX and plat/al information.
+ if ($action == 'import') {
+ ax_synchronize($user->login(), S::v('uid'));
}
- if ($login) {
- if ($action == 'import') {
- ax_synchronize($login, S::v('uid'));
- }
- // get details from user, but looking only info that can be seen by ax
- $user = get_user_details($login, S::v('uid'), 'ax');
- $userax= get_user_ax($user['matricule_ax']);
- require_once 'profil.func.inc.php';
- $diff = diff_user_details($userax, $user, 'ax');
-
- $page->assign('x', $user);
- $page->assign('diff', $diff);
- }
+ require_once 'profil.func.inc.php';
+ $userxorg = get_user_details($user->login(), S::v('uid'), 'ax');
+ $userax = get_user_ax($userxorg['matricule_ax']);
+ $diff = diff_user_details($userax, $userxorg, 'ax');
+
+ $page->assign('x', $userxorg);
+ $page->assign('diff', $diff);
}
function handler_validate(&$page, $action = 'list', $id = null)
$nl->toHtml($page, S::v('prenom'), S::v('nom'), S::v('femme'));
}
if (Post::has('send')) {
- $nl->sendTo(S::v('prenom'), S::v('nom'),
- S::v('bestalias'), S::v('femme'),
- S::v('mail_fmt') != 'texte');
+ $nl->sendTo(S::user()->login(), S::user()->bestEmail(),
+ S::v('prenom'), S::v('nom'),
+ S::v('femme'), S::v('mail_fmt') != 'texte');
}
}
protected function getAllRecipients()
{
- return "SELECT ni.user_id, IF(ni.user_id = 0, ni.email, a.alias) AS alias,
+ global $globals;
+ return "SELECT ni.user_id, IF(ni.user_id = 0, NULL, u.hruid) AS hruid,
+ IF(ni.user_id = 0, ni.email, CONCAT(a.alias, '@{$globals->mail->domain}')) AS alias,
IF(ni.user_id = 0, ni.prenom, u.prenom) AS prenom,
IF(ni.user_id = 0, ni.nom, IF(u.nom_usage='', u.nom, u.nom_usage)) AS nom,
FIND_IN_SET('femme', IF(ni.user_id = 0, ni.flag, u.flags)) AS sexe,
}
switch (Env::v('action')) {
case 'retirer':
- if (is_numeric($user)) {
- if (XDB::execute('DELETE FROM contacts
- WHERE uid = {?} AND contact = {?}',
- $uid, $user))
- {
- $page->trigSuccess("Contact retiré !");
- }
- } else {
- if (XDB::execute(
- 'DELETE FROM c
- USING contacts AS c
- INNER JOIN aliases AS a ON (c.contact=a.id and a.type!="homonyme")
- WHERE c.uid = {?} AND a.alias={?}', $uid, $user))
- {
+ if (($user = User::get(Env::v('user')))) {
+ if (XDB::execute("DELETE FROM contacts
+ WHERE uid = {?} AND contact = {?}", $uid, $user->id())) {
$page->trigSuccess("Contact retiré !");
}
}
break;
case 'ajouter':
- require_once('user.func.inc.php');
- if (($login = get_user_login($user)) !== false) {
- if (XDB::execute(
- 'REPLACE INTO contacts (uid, contact)
- SELECT {?}, id
- FROM aliases
- WHERE alias = {?}', $uid, $login))
- {
+ if (($user = User::get(Env::v('user')))) {
+ if (XDB::execute("REPLACE INTO contacts (uid, contact)
+ VALUES ({?}, {?})", $uid, $user->id())) {
$page->trigSuccess('Contact ajouté !');
} else {
$page->trigWarning('Contact déjà dans la liste !');
}
}
+ break;
}
$search = false;
$page->changeTpl('emails/index.tpl');
$page->setTitle('Mes emails');
- $uid = S::v('uid');
+ $user = S::user();
+ // Apply the bestalias change request.
if ($action == 'best' && $email) {
if (!S::has_xsrf_token()) {
return PL_FORBIDDEN;
}
- // bestalias is the first bit : 1
- // there will be maximum 8 bits in flags : 255
- XDB::execute("UPDATE aliases SET flags=flags & (255 - 1) WHERE id={?}", $uid);
- XDB::execute("UPDATE aliases SET flags=flags | 1 WHERE id={?} AND alias={?}",
- $uid, $email);
+ XDB::execute("UPDATE aliases
+ SET flags = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', flags, ','), ',bestalias,', ','))
+ WHERE id = {?}", $user->id());
+ XDB::execute("UPDATE aliases
+ SET flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
+ WHERE id = {?} AND alias = {?}", $user->id(), $email);
+
+ // As having a non-null bestalias value is critical in
+ // plat/al's code, we do an a posteriori check on the
+ // validity of the bestalias.
+ fix_bestalias($user);
}
- // on regarde si on a affaire à un homonyme
+ // Fetch and display aliases.
$sql = "SELECT alias, (type='a_vie') AS a_vie,
(alias REGEXP '\\\\.[0-9]{2}$') AS cent_ans,
FIND_IN_SET('bestalias',flags) AS best, expire
FROM aliases
WHERE id = {?} AND type!='homonyme'
ORDER BY LENGTH(alias)";
- $page->assign('aliases', XDB::iterator($sql, $uid));
+ $page->assign('aliases', XDB::iterator($sql, $user->id()));
- $homonyme = XDB::query("SELECT alias FROM aliases INNER JOIN homonymes ON (id = homonyme_id) WHERE user_id = {?} AND type = 'homonyme'", $uid);
+ // Check for homonyms.
+ $homonyme = XDB::query(
+ "SELECT alias
+ FROM aliases
+ INNER JOIN homonymes ON (id = homonyme_id)
+ WHERE user_id = {?} AND type = 'homonyme'", $user->id());
$page->assign('homonyme', $homonyme->fetchOneCell());
- // Affichage des redirections de l'utilisateur.
- $redirect = new Redirect($uid);
+ // Display active redirections.
+ $redirect = new Redirect($user);
$page->assign('mails', $redirect->active_emails());
- // on regarde si l'utilisateur a un alias et si oui on l'affiche !
- $forlife = S::v('forlife');
+ // Display, when available, the @alias_dom email alias.
$res = XDB::query(
"SELECT alias
FROM virtual AS v
INNER JOIN virtual_redirect AS vr USING(vid)
WHERE (redirect={?} OR redirect={?})
AND alias LIKE '%@{$globals->mail->alias_dom}'",
- $forlife.'@'.$globals->mail->domain, $forlife.'@'.$globals->mail->domain2);
+ $user->forlifeEmail(),
+ // TODO: remove this über-ugly hack. The issue is that you need
+ // to remove all @m4x.org addresses in virtual_redirect first.
+ $user->login() . '@' . $globals->mail->domain2);
$page->assign('melix', $res->fetchOneCell());
}
$page->changeTpl('emails/alias.tpl');
$page->setTitle('Alias melix.net');
- $uid = S::v('uid');
- $forlife = S::v('forlife');
-
- $page->assign('demande', AliasReq::get_request($uid));
+ $user = S::user();
+ $page->assign('demande', AliasReq::get_request($user->id()));
+ // Remove the email alias.
if ($action == 'delete' && $value) {
S::assert_xsrf_token();
- //Suppression d'un alias
XDB::execute(
- 'DELETE virtual, virtual_redirect
- FROM virtual
- INNER JOIN virtual_redirect USING (vid)
- WHERE alias = {?} AND (redirect = {?} OR redirect = {?})', $value,
- $forlife.'@'.$globals->mail->domain, $forlife.'@'.$globals->mail->domain2);
+ "DELETE virtual, virtual_redirect
+ FROM virtual
+ INNER JOIN virtual_redirect USING (vid)
+ WHERE alias = {?} AND (redirect = {?} OR redirect = {?})",
+ $value, $user->forlifeEmail(),
+ // TODO: remove this über-ugly hack. The issue is that you need
+ // to remove all @m4x.org addresses in virtual_redirect first.
+ $user->login() . '@' . $globals->mail->domain2);
}
- //Récupération des alias éventuellement existants
+ // Fetch existing @alias_dom aliases.
$res = XDB::query(
"SELECT alias, emails_alias_pub
FROM auth_user_quick, virtual
INNER JOIN virtual_redirect USING(vid)
- WHERE ( redirect={?} OR redirect= {?} )
+ WHERE (redirect = {?} OR redirect = {?})
AND alias LIKE '%@{$globals->mail->alias_dom}' AND user_id = {?}",
- $forlife.'@'.$globals->mail->domain,
- $forlife.'@'.$globals->mail->domain2, S::v('uid'));
+ $user->forlifeEmail(),
+ // TODO: remove this über-ugly hack. The issue is that you need
+ // to remove all @m4x.org addresses in virtual_redirect first.
+ $user->login() . '@' . $globals->mail->domain2, $user->id());
list($alias, $visibility) = $res->fetchOneRow();
$page->assign('actuel', $alias);
}
//Insertion de la demande dans la base, écrase les requêtes précédente
- $myalias = new AliasReq($uid, $alias, $raison, $public);
+ $myalias = new AliasReq($user, $alias, $raison, $public);
$myalias->submit();
$page->assign('success',$alias);
return;
if ($value == 'public') {
XDB::execute("UPDATE auth_user_quick SET emails_alias_pub = 'public'
- WHERE user_id = {?}", S::v('uid'));
+ WHERE user_id = {?}", $user->id());
} else {
XDB::execute("UPDATE auth_user_quick SET emails_alias_pub = 'private'
- WHERE user_id = {?}", S::v('uid'));
+ WHERE user_id = {?}", $user->id());
}
$visibility = $value;
$page->changeTpl('emails/redirect.tpl');
- $uid = S::v('uid');
- $forlife = S::v('forlife');
-
- $page->assign('eleve', S::i('promo') >= date("Y") - 5);
+ $user = S::user();
+ $page->assign_by_ref('user', $user);
+ $page->assign('eleve', $user->promo() >= date("Y") - 5);
- $redirect = new Redirect(S::v('uid'));
+ $redirect = new Redirect($user);
// FS#703 : $_GET is urldecoded twice, hence
// + (the data) => %2B (in the url) => + (first decoding) => ' ' (second decoding)
// Since there can be no spaces in emails, we can fix this with :
$email = str_replace(' ', '+', $email);
+ // Apply email redirection change requests.
if ($action == 'remove' && $email) {
$retour = $redirect->delete_email($email);
$page->assign('retour', $retour);
}
}
+ // Fetch the @alias_dom email alias, if any.
$res = XDB::query(
"SELECT alias
FROM virtual
INNER JOIN virtual_redirect USING(vid)
WHERE (redirect={?} OR redirect={?})
AND alias LIKE '%@{$globals->mail->alias_dom}'",
- $forlife.'@'.$globals->mail->domain, $forlife.'@'.$globals->mail->domain2);
+ $user->forlifeEmail(),
+ // TODO: remove this über-ugly hack. The issue is that you need
+ // to remove all @m4x.org addresses in virtual_redirect first.
+ $user->login() . '@' . $globals->mail->domain2);
$melix = $res->fetchOneCell();
if ($melix) {
list($melix) = explode('@', $melix);
$page->assign('melix',$melix);
}
+ // Fetch existing email aliases.
$res = XDB::query(
"SELECT alias,expire
FROM aliases
WHERE id={?} AND (type='a_vie' OR type='alias')
- ORDER BY !FIND_IN_SET('usage',flags), LENGTH(alias)", $uid);
-
+ ORDER BY !FIND_IN_SET('usage',flags), LENGTH(alias)", $user->id());
$page->assign('alias', $res->fetchAllAssoc());
- $page->assign('emails',$redirect->emails);
+ $page->assign('emails', $redirect->emails);
+ // Display GoogleApps acount information.
require_once 'googleapps.inc.php';
- $page->assign('googleapps', GoogleAppsAccount::account_status($uid));
+ $page->assign('googleapps', GoogleAppsAccount::account_status($user->id()));
}
function handler_antispam(&$page, $statut_filtre = null)
$page->changeTpl('emails/antispam.tpl');
- $bogo = new Bogo(S::v('uid'));
+ $bogo = new Bogo(S::user());
if (isset($statut_filtre)) {
$bogo->change($statut_filtre + 0);
}
- $page->assign('filtre',$bogo->level());
+ $page->assign('filtre', $bogo->level());
}
function handler_submit(&$page)
if (Post::has('send_email')) {
S::assert_xsrf_token();
- $upload = PlUpload::get($_FILES['mail'], S::v('forlife'), 'spam.submit', true);
+ $upload = PlUpload::get($_FILES['mail'], S::user()->login(), 'spam.submit', true);
if (!$upload) {
$page->trigError('Une erreur a été rencontrée lors du transfert du fichier');
return;
$page->trigError('Le fichier ne contient pas un email complet');
return;
}
+ $type = (Post::v('type') == 'spam' ? 'spam' : 'nonspam');
+
global $globals;
- $box = Post::v('type') . '@' . $globals->mail->domain;
+ $box = $type . '@' . $globals->mail->domain;
$mailer = new PlMailer();
$mailer->addTo($box);
- $mailer->setFrom('"' . S::v('prenom') . ' ' . S::v('nom') . '" <web@' . $globals->mail->domain . '>');
- $mailer->setTxtBody(Post::v('type') . ' soumis par ' . S::v('forlife') . ' via le web');
- $mailer->addUploadAttachment($upload, Post::v('type') . '.mail');
+ $mailer->setFrom('"' . S::user()->fullName() . '" <web@' . $globals->mail->domain . '>');
+ $mailer->setTxtBody($type . ' soumis par ' . S::user()->login() . ' via le web');
+ $mailer->addUploadAttachment($upload, $type . '.mail');
$mailer->send();
$page->trigSuccess('Le message a été transmis à ' . $box);
$upload->clear();
function handler_send(&$page)
{
- global $globals;
$page->changeTpl('emails/send.tpl');
$page->addJsLink('ajax.js');
$error = false;
foreach ($_FILES as &$file) {
- if ($file['name'] && !PlUpload::get($file, S::v('forlife'), 'emails.send', false)) {
+ if ($file['name'] && !PlUpload::get($file, S::user()->login(), 'emails.send', false)) {
$page->trigError(PlUpload::$lastError);
$error = true;
break;
if (empty($to) && empty($cc) && empty($to2) && empty($bcc) && empty($cc2)) {
$page->trigError("Indique au moins un destinataire.");
- $page->assign('uploaded_f', PlUpload::listFilenames(S::v('forlife'), 'emails.send'));
+ $page->assign('uploaded_f', PlUpload::listFilenames(S::user()->login(), 'emails.send'));
} else {
$mymail = new PlMailer();
$mymail->setFrom($from);
if (!empty($bcc)) { $mymail->addBcc($bcc); }
if (!empty($to2)) { $mymail->addTo($to2); }
if (!empty($cc2)) { $mymail->addCc($cc2); }
- $files =& PlUpload::listFiles(S::v('forlife'), 'emails.send');
+ $files =& PlUpload::listFiles(S::user()->login(), 'emails.send');
foreach ($files as $name=>&$upload) {
$mymail->addUploadAttachment($upload, $name);
}
}
if ($mymail->send()) {
$page->trigSuccess("Ton email a bien été envoyé.");
- $_REQUEST = array('bcc' => S::v('bestalias').'@'.$globals->mail->domain);
- PlUpload::clear(S::v('forlife'), 'emails.send');
+ $_REQUEST = array('bcc' => S::user()->bestEmail());
+ PlUpload::clear(S::user()->login(), 'emails.send');
} else {
$page->trigError("Erreur lors de l'envoi du courriel, réessaye.");
- $page->assign('uploaded_f', PlUpload::listFilenames(S::v('forlife'), 'emails.send'));
+ $page->assign('uploaded_f', PlUpload::listFilenames(S::user()->login(), 'emails.send'));
}
}
}
FROM email_send_save
WHERE uid = {?}", S::i('uid'));
if ($res->numRows() == 0) {
- PlUpload::clear(S::v('forlife'), 'emails.send');
- $_REQUEST['bcc'] = S::v('bestalias').'@'.$globals->mail->domain;
+ PlUpload::clear(S::user()->login(), 'emails.send');
+ $_REQUEST['bcc'] = S::user()->bestEmail();
} else {
$data = unserialize($res->fetchOneCell());
$_REQUEST = array_merge($_REQUEST, $data);
ORDER BY u.nom, u.prenom", S::v('uid'));
$page->assign('contacts', $res->fetchAllAssoc());
$page->assign('maxsize', ini_get('upload_max_filesize') . 'o');
+ $page->assign('user', S::user());
}
- function handler_test(&$page, $forlife = null)
+ function handler_test(&$page, $hruid = null)
{
- global $globals;
require_once 'emails.inc.php';
if (!S::has_xsrf_token()) {
return PL_FORBIDDEN;
}
- if (!S::has_perms() || !$forlife) {
- $forlife = S::v('bestalias');
+
+ // Retrieves the User object for the test email recipient.
+ if (S::has_perms() && $hruid) {
+ $user = User::getSilent($hruid);
+ } else {
+ $user = S::user();
+ }
+ if (!$user) {
+ return PL_NOT_FOUND;
}
- $res = XDB::query("SELECT FIND_IN_SET('femme', u.flags), prenom, user_id
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id)
- WHERE a.alias = {?}", $forlife);
- list($sexe, $prenom, $uid) = $res->fetchOneRow();
- $redirect = new Redirect($uid);
+ // Sends the test email.
+ $redirect = new Redirect($user);
$mailer = new PlMailer('emails/test.mail.tpl');
- $mailer->assign('email', $forlife . '@' . $globals->mail->domain);
+ $mailer->assign('email', $user->bestEmail());
$mailer->assign('redirects', $redirect->active_emails());
- $mailer->assign('sexe', $sexe);
- $mailer->assign('prenom', $prenom);
- $mailer->send();
+ $mailer->assign('display_name', $user->displayName());
+ $mailer->assign('sexe', $user->isFemale());
+ $mailer->send($user->isEmailFormatHtml());
exit;
}
function handler_imap_in(&$page, $hash = null, $login = null)
{
$page->changeTpl('emails/imap_register.tpl');
- $id = null;
+ $user = null;
if (!empty($hash) || !empty($login)) {
- $req = XDB::query("SELECT u.prenom, FIND_IN_SET('femme', u.flags) AS sexe, a.id
- FROM aliases AS a
- INNER JOIN newsletter_ins AS ni ON (a.id = ni.user_id)
- INNER JOIN auth_user_md5 AS u ON (u.user_id = a.id)
- WHERE a.alias = {?} AND ni.hash = {?}", $login, $hash);
- list($prenom, $sexe, $id) = $req->fetchOneRow();
+ $user = User::getSilent($login);
+ if ($user) {
+ $req = XDB::query("SELECT 1 FROM newsletter_ins WHERE user_id = {?} AND hash = {?}", $user->id(), $hash);
+ if ($req->numRows() == 0) {
+ $user = null;
+ }
+ }
}
require_once('emails.inc.php');
$page->assign('ok', false);
- if (S::logged() && (is_null($id) || $id == S::i('uid'))) {
- $storage = new EmailStorage(S::i('uid'), 'imap');
+ if (S::logged() && (is_null($user) || $user->id() == S::i('uid'))) {
+ $storage = new EmailStorage(S::user(), 'imap');
$storage->activate();
$page->assign('ok', true);
$page->assign('prenom', S::v('prenom'));
$page->assign('sexe', S::v('femme'));
- } else if (!S::logged() && $id) {
- $storage = new EmailStorage($id, 'imap');
+ } else if (!S::logged() && $user) {
+ $storage = new EmailStorage($user, 'imap');
$storage->activate();
$page->assign('ok', true);
- $page->assign('prenom', $prenom);
- $page->assign('sexe', $sexe);
+ $page->assign('prenom', $user->displayName());
+ $page->assign('sexe', $user->isFemale());
}
}
$email = valide_email($email);
// vérifications d'usage
- $sel = XDB::query(
- "SELECT e.uid, a.alias
- FROM emails AS e
- INNER JOIN aliases AS a ON (e.uid = a.id AND type!='homonyme'
- AND FIND_IN_SET('bestalias',a.flags))
- WHERE e.email={?}", $email);
-
- if (list($uid, $dest) = $sel->fetchOneRow()) {
+ $sel = XDB::query("SELECT uid FROM emails WHERE email = {?}", $email);
+ if (($uid = $sel->fetchOneCell())) {
+ $dest = User::getSilent($uid);
+
// envoi du mail
$message = "Bonjour !
Cet email a été généré automatiquement par le service de patte cassée de
-Polytechnique.org car un autre utilisateur, ".S::v('prenom').' '.S::v('nom').",
+Polytechnique.org car un autre utilisateur, " . S::user()->fullName() . ",
nous a signalé qu'en t'envoyant un email, il avait reçu un message d'erreur
indiquant que ton adresse de redirection $email
ne fonctionnait plus !
$mail = new PlMailer();
$mail->setFrom('"Polytechnique.org" <support@' . $globals->mail->domain . '>');
- $mail->addTo("$dest@" . $globals->mail->domain);
+ $mail->addTo($dest->bestEmail());
$mail->setSubject("Une de tes adresse de redirection Polytechnique.org ne marche plus !!");
$mail->setTxtBody($message);
$mail->send();
$sel = XDB::query(
"SELECT e1.uid, e1.panne != 0 AS panne,
(count(e2.uid) + IF(FIND_IN_SET('googleapps', u.mail_storage), 1, 0)) AS nb_mails,
- u.nom, u.prenom, u.promo, a.alias AS forlife
+ u.nom, u.prenom, u.promo, u.hruid
FROM emails as e1
LEFT JOIN emails as e2 ON(e1.uid = e2.uid
AND FIND_IN_SET('active', e2.flags)
AND e1.email != e2.email)
INNER JOIN auth_user_md5 as u ON(e1.uid = u.user_id)
- INNER JOIN aliases AS a ON (a.id = e1.uid AND a.type = 'a_vie')
WHERE e1.email = {?}
GROUP BY e1.uid", $email);
if ($x = $sel->fetchOneAssoc()) {
{
$page->changeTpl('emails/lost.tpl');
- $page->assign('lost_emails', XDB::iterator('
- SELECT u.user_id, a.alias
+ $page->assign('lost_emails', XDB::iterator("
+ SELECT u.user_id, u.hruid
FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type = "a_vie")
- LEFT JOIN emails AS e ON (u.user_id=e.uid AND FIND_IN_SET("active",e.flags))
- WHERE e.uid IS NULL AND
- FIND_IN_SET("googleapps", u.mail_storage) = 0 AND
- u.deces = 0
- ORDER BY u.promo DESC, u.nom, u.prenom'));
+ LEFT JOIN emails AS e ON (u.user_id = e.uid AND FIND_IN_SET('active', e.flags))
+ WHERE e.uid IS NULL AND FIND_IN_SET('googleapps', u.mail_storage) = 0 AND
+ u.deces = 0 AND u.perms IN ('user', 'admin', 'disabled')
+ ORDER BY u.promo DESC, u.nom, u.prenom"));
}
}
exit;
}
} else {
- $upload = new PlUpload(S::v('forlife'), 'event');
+ $upload = new PlUpload(S::user()->login(), 'event');
if ($upload->exists() && $upload->isType('image')) {
header('Content-Type: ' . $upload->contentType());
echo $upload->getContents();
$peremption = Post::i('peremption');
$valid_mesg = Post::v('valid_mesg');
$action = Post::v('action');
- $upload = new PlUpload(S::v('forlife'), 'event');
+ $upload = new PlUpload(S::user()->login(), 'event');
$this->upload_image($page, $upload);
if (($promo_min > $promo_max && $promo_max != 0)||
require_once 'validations.inc.php';
$evtreq = new EvtReq($titre, $texte, $promo_min, $promo_max,
- $peremption, $valid_mesg, S::v('uid'), $upload);
+ $peremption, $valid_mesg, S::user(), $upload);
$evtreq->submit();
$page->assign('ok', true);
} elseif (!Env::v('preview')) {
$arch = $action == 'archives';
$page->assign('action', $action);
- $upload = new PlUpload(S::v('forlife'), 'event');
+ $upload = new PlUpload(S::user()->login(), 'event');
if ((Env::has('preview') || Post::v('action') == "Proposer") && $eid) {
$action = 'edit';
$this->upload_image($page, $upload);
$_SESSION = array_merge($row, $_SESSION);
require_once 'banana/forum.inc.php';
- $banana = new ForumsBanana(S::v('forlife'), array('group' => $group, 'action' => 'rss2'));
+ $banana = new ForumsBanana(S::user(), array('group' => $group, 'action' => 'rss2'));
$banana->run();
exit;
}
$page->addJsLink('motdepasse.js');
$page->setTitle('Compte Google Apps');
- $account = new GoogleAppsAccount(S::v('uid'), S::v('forlife'));
+ $account = new GoogleAppsAccount(S::user());
// Fills up the 'is Google Apps redirection active' variable.
$page->assign('redirect_active', false);
$page->assign('redirect_unique', true);
if ($account->active()) {
- $redirect = new Redirect(S::v('uid'));
+ $redirect = new Redirect(S::user());
$page->assign('redirect_unique', !$redirect->other_active('googleapps'));
$storage = new EmailStorage(S::v('uid'), 'googleapps');
if (!$user && Post::has('login')) {
$user = Post::v('login');
}
- if ($user && !is_numeric($user)) {
- $res = XDB::query("SELECT id FROM aliases WHERE alias = {?} AND type != 'homonyme'", $user);
- $user = $res->fetchOneCell();
- }
+ $user = User::get($user);
if ($user) {
$account = new GoogleAppsAccount($user);
- $storage = new EmailStorage($user, 'googleapps');
+ $storage = new EmailStorage($user->id(), 'googleapps');
// Force synchronization of plat/al and Google Apps passwords.
if ($action == 'forcesync' && $account->sync_password) {
- $res = XDB::query("SELECT password FROM auth_user_md5 WHERE user_id = {?}", $user);
+ $res = XDB::query("SELECT password FROM auth_user_md5 WHERE user_id = {?}", $user->id());
$account->set_password($res->fetchOneCell());
$page->trigSuccess('Le mot de passe a été synchronisé.');
}
// Displays basic account information.
$page->assign('account', $account);
- $page->assign('admin_account', GoogleAppsAccount::is_administrator($user));
+ $page->assign('admin_account', GoogleAppsAccount::is_administrator($user->id()));
$page->assign('googleapps_storage', $storage->active);
- $page->assign('user', $user);
+ $page->assign('user', $user->id());
// Retrieves user's pending requests.
$res = XDB::iterator(
"SELECT q_id, q_recipient_id, p_status, j_type, UNIX_TIMESTAMP(p_entry_date) AS p_entry_date
FROM gapps_queue
WHERE q_recipient_id = {?}
- ORDER BY p_entry_date DESC", $user);
+ ORDER BY p_entry_date DESC", $user->id());
$page->assign('requests', $res);
}
}
// click on validate button 'add_owner_sub' or type <enter>
if (Post::has('add_owner_sub') && Post::has('add_owner')) {
- require_once('user.func.inc.php');
// if we want to add an owner and then type <enter>, then both
// add_owner_sub and add_owner are filled.
- $oforlifes = get_users_forlife_list(Post::v('add_owner'), true);
- $mforlifes = get_users_forlife_list(Post::v('add_member'), true);
+ $oforlifes = User::getBulkForlifeEmails(Post::v('add_owner'), true);
+ $mforlifes = User::getBulkForlifeEmails(Post::v('add_member'), true);
if (!is_null($oforlifes)) {
$owners = array_merge($owners, $oforlifes);
}
}
// click on validate button 'add_member_sub'
- require_once('user.func.inc.php');
if (Post::has('add_member_sub') && Post::has('add_member')) {
- $forlifes = get_users_forlife_list(Post::v('add_member'), true);
+ $forlifes = User::getBulkForlifeEmails(Post::v('add_member'), true);
if (!is_null($forlifes)) {
$members = array_merge($members, $forlifes);
}
}
if (Post::has('add_member_sub') && isset($_FILES['add_member_file']) && $_FILES['add_member_file']['tmp_name']) {
- $upload =& PlUpload::get($_FILES['add_member_file'], S::v('forlife'), 'list.addmember', true);
+ $upload =& PlUpload::get($_FILES['add_member_file'], S::user()->login(), 'list.addmember', true);
if (!$upload) {
$page->trigError('Une erreur s\'est produite lors du téléchargement du fichier');
} else {
- $forlifes = get_users_forlife_list($upload->getContents(), true);
+ $forlifes = User::getBulkForlifeEmails($upload->getContents(), true);
if (!is_null($forlifes)) {
$members = array_merge($members, $forlifes);
}
if (!$page->nb_errs()) {
$page->assign('created', true);
require_once 'validations.inc.php';
- $req = new ListeReq(S::v('uid'), $asso, $liste, $domain,
+ $req = new ListeReq(S::user(), $asso, $liste, $domain,
Post::v('desc'), Post::i('advertise'),
Post::i('modlevel'), Post::i('inslevel'),
$owners, $members);
exit;
}
require_once('banana/ml.inc.php');
- $banana = new MLBanana(S::v('forlife'), Array('listname' => $liste, 'domain' => $domain, 'action' => 'rss2'));
+ $banana = new MLBanana(S::user(), Array('listname' => $liste, 'domain' => $domain, 'action' => 'rss2'));
$banana->run();
}
exit;
} else {
list($name, $dom) = @explode('@', $login);
if ($dom == $globals->mail->domain || $dom == $globals->mail->domain2) {
- _default_user_callback($login);
+ User::_default_user_callback($login);
}
}
}
if (Env::has('add_member')) {
S::assert_xsrf_token();
- require_once('user.func.inc.php');
- $members = get_users_forlife_list(Env::v('add_member'),
- false,
- array('ListsModule', 'no_login_callback'));
+ $members = User::getBulkForlifeEmails(Env::v('add_member'),
+ false,
+ array('ListsModule', 'no_login_callback'));
$arr = $this->client->mass_subscribe($liste, $members);
if (is_array($arr)) {
foreach($arr as $addr) {
if (isset($_FILES['add_member_file']) && $_FILES['add_member_file']['tmp_name']) {
S::assert_xsrf_token();
- $upload =& PlUpload::get($_FILES['add_member_file'], S::v('forlife'), 'list.addmember', true);
+ $upload =& PlUpload::get($_FILES['add_member_file'], S::user()->login(), 'list.addmember', true);
if (!$upload) {
$page->trigError('Une erreur s\'est produite lors du téléchargement du fichier');
} else {
- $members = get_users_forlife_list($upload->getContents(),
- false,
- array('ListsModule', 'no_login_callback'));
+ $members = User::getBulkForlifeEmails($upload->getContents(),
+ false,
+ array('ListsModule', 'no_login_callback'));
$arr = $this->client->mass_subscribe($liste, $members);
if (is_array($arr)) {
foreach($arr as $addr) {
if (Env::has('add_owner')) {
S::assert_xsrf_token();
- require_once('user.func.inc.php');
- $owners = get_users_forlife_list(Env::v('add_owner'), false, array('ListsModule', 'no_login_callback'));
+ $owners = User::getBulkForlifeEmails(Env::v('add_owner'), false, array('ListsModule', 'no_login_callback'));
if ($owners) {
foreach ($owners as $login) {
if ($this->client->add_owner($liste, $login)) {
- $page->trigSuccess($alias." ajouté aux modérateurs.");
+ $page->trigSuccess($login ." ajouté aux modérateurs.");
}
}
}
$page->assign('nbInsMarkOK', $res->fetchOneCell());
}
- function handler_private(&$page, $uid = null,
+ function handler_private(&$page, $hruid = null,
$action = null, $value = null)
{
global $globals;
$page->changeTpl('marketing/private.tpl');
- if (is_null($uid)) {
+ $user = User::getSilent($hruid);
+ if (!$user) {
return PL_NOT_FOUND;
}
- $page->assign('path', 'marketing/private/'.$uid);
-
- $res = XDB::query("SELECT nom, prenom, promo, matricule
- FROM auth_user_md5
- WHERE user_id={?} AND perms='pending'", $uid);
-
- if (list($nom, $prenom, $promo, $matricule) = $res->fetchOneRow()) {
- require_once('user.func.inc.php');
- $matricule_X = get_X_mat($matricule);
- $page->assign('nom', $nom);
- $page->assign('prenom', $prenom);
- $page->assign('promo', $promo);
- $page->assign('matricule', $matricule);
- $page->assign('matricule_X',$matricule_X);
- } else {
- $page->kill('uid invalide');
+ // Retrieves marketed user details.
+ $res = XDB::query(
+ "SELECT matricule
+ FROM auth_user_md5
+ WHERE user_id = {?} AND perms = 'pending'", $user->id());
+ if (!($matricule = $res->fetchOneCell())) {
+ $page->kill("Cet utilisateur est déjà inscrit au site.");
}
+ require_once('user.func.inc.php');
+ $matricule = $res->fetchOneCell();
+ $matricule_X = get_X_mat($matricule);
+
+ $page->assign('full_name', $user->fullName());
+ $page->assign('promo', $user->promo());
+ $page->assign('matricule', $matricule);
+ $page->assign('matricule_X',$matricule_X);
+
+ // Applies in-parameter action to the user.
if ($action == 'del') {
S::assert_xsrf_token();
- Marketing::clear($uid, $value);
+ Marketing::clear($user->id(), $value);
}
if ($action == 'rel') {
- $market = Marketing::get($uid, $value);
+ $market = Marketing::get($user->id(), $value);
if ($market == null) {
$page->trigWarning("Aucun marketing n'a été effectué vers $value");
} else {
if ($action == 'relforce') {
S::assert_xsrf_token();
- $market = Marketing::get($uid, Post::v('to'));
+ $market = Marketing::get($user->id(), Post::v('to'));
if (is_null($market)) {
- $market = new Marketing($uid, Post::v('to'), 'default', null, 'staff');
+ $market = new Marketing($user->id(), Post::v('to'), 'default', null, 'staff');
}
$market->send(Post::v('title'), Post::v('message'));
$page->trigSuccess("Email envoyé");
if ($action == 'insrel') {
S::assert_xsrf_token();
- if (Marketing::relance($uid)) {
+ if (Marketing::relance($user->id())) {
$page->trigSuccess('relance faite');
}
}
if ($action == 'add' && Post::has('email') && Post::has('type')) {
- $market = new Marketing($uid, Post::v('email'), 'default', null, Post::v('type'), S::v('uid'));
+ $market = new Marketing($user->id(), Post::v('email'), 'default', null, Post::v('type'), S::v('uid'));
$market->add(false);
}
+ // Retrieves and display the existing marketing attempts.
$res = XDB::iterator(
"SELECT r.*, a.alias
FROM register_marketing AS r
INNER JOIN aliases AS a ON (r.sender=a.id AND a.type = 'a_vie')
WHERE uid={?}
- ORDER BY date", $uid);
+ ORDER BY date", $user->id());
$page->assign('addr', $res);
$res = XDB::query("SELECT date, relance FROM register_pending
- WHERE uid = {?}", $uid);
+ WHERE uid = {?}", $user->id());
if (list($pending, $relance) = $res->fetchOneRow()) {
$page->assign('pending', $pending);
$page->assign('relance', $relance);
}
+
+ $page->assign('path', 'marketing/private/' . $user->login());
}
function handler_broken(&$page, $uid = null)
{
- require_once('user.func.inc.php');
$page->changeTpl('marketing/broken.tpl');
if (is_null($uid)) {
return PL_NOT_FOUND;
}
- $forlife = get_user_forlife($uid);
- if (!$forlife) {
+
+ $user = User::get($uid);
+ if (!$user) {
return PL_NOT_FOUND;
- } elseif ($forlife == S::v('forlife')) {
+ } elseif ($user->login() == S::user()->login()) {
pl_redirect('emails/redirect');
}
- $res = Xdb::query("SELECT u.nom, u.prenom, u.promo, FIND_IN_SET('femme', u.flags) AS sexe,
- u.deces = '0000-00-00' AS alive, a.alias AS forlife, b.alias AS bestalias,
- IF(e.email IS NOT NULL, e.email, IF(FIND_IN_SET('googleapps', u.mail_storage), 'googleapps', NULL)) AS email, e.last
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
- INNER JOIN aliases AS b ON (b.id = u.user_id AND FIND_IN_SET('bestalias', b.flags))
- LEFT JOIN emails AS e ON (e.flags = 'active' AND e.uid = u.user_id)
- WHERE a.alias = {?}
- ORDER BY e.panne_level, e.last", $forlife);
+ $res = XDB::query(
+ "SELECT u.deces = '0000-00-00' AS alive, e.last,
+ IF(e.email IS NOT NULL, e.email, IF(FIND_IN_SET('googleapps', u.mail_storage), 'googleapps', NULL)) AS email
+ FROM auth_user_md5 AS u
+ LEFT JOIN emails AS e ON (e.flags = 'active' AND e.uid = u.user_id)
+ WHERE u.user_id = {?}
+ ORDER BY e.panne_level, e.last", $user->id());
if (!$res->numRows()) {
return PL_NOT_FOUND;
}
- $user = $res->fetchOneAssoc();
+ $user->addProperties($res->fetchOneAssoc());
$page->assign('user', $user);
$email = null;
S::assert_xsrf_token();
// security stuff
- check_email($email, "Proposition d'une adresse surveillee pour " . $user['forlife'] . " par " . S::v('forlife'));
- $res = XDB::query("SELECT e.flags
- FROM emails AS e
- INNER JOIN aliases AS a ON (a.id = e.uid)
- WHERE e.email = {?} AND a.alias = {?}", $email, $user['forlife']);
+ check_email($email, "Proposition d'une adresse surveillee pour " . $user->login() . " par " . S::user()->login());
+ $res = XDB::query("SELECT flags
+ FROM emails
+ WHERE email = {?} AND uid = {?}", $email, $user->id());
$state = $res->numRows() ? $res->fetchOneCell() : null;
if ($state == 'panne') {
- $page->trigWarning("L'adresse que tu as fournie est l'adresse actuelle de {$user['prenom']} et est en panne.");
+ $page->trigWarning("L'adresse que tu as fournie est l'adresse actuelle de {$user->fullName()} et est en panne.");
} elseif ($state == 'active') {
- $page->trigWarning("L'adresse que tu as fournie est l'adresse actuelle de {$user['prenom']}");
- } elseif ($user['email'] && !trim(Post::v('comment'))) {
+ $page->trigWarning("L'adresse que tu as fournie est l'adresse actuelle de {$user->fullName()}");
+ } elseif ($user->email && !trim(Post::v('comment'))) {
$page->trigError("Il faut que tu ajoutes un commentaire à ta proposition pour justifier le "
- ."besoin de changer la redirection de " . $user['prenom']);
+ . "besoin de changer la redirection de {$user->fullName()}.");
} else {
require_once 'validations.inc.php';
- $valid = new BrokenReq(S::i('uid'), $user, $email, trim(Post::v('comment')));
+ $valid = new BrokenReq(S::user(), $user, $email, trim(Post::v('comment')));
$valid->submit();
$page->assign('sent', true);
}
$page->assign('nonins', XDB::iterator($sql, $promo));
}
- function handler_public(&$page, $uid = null)
+ function handler_public(&$page, $hruid = null)
{
$page->changeTpl('marketing/public.tpl');
- if (is_null($uid)) {
+ // Retrieves the user info, and checks the user is not yet registered.
+ $user = User::getSilent($hruid);
+ if (!$user) {
return PL_NOT_FOUND;
}
- $res = XDB::query("SELECT nom, prenom, promo FROM auth_user_md5
- WHERE user_id={?} AND perms='pending'", $uid);
+ $res = XDB::query(
+ "SELECT COUNT(*)
+ FROM auth_user_md5
+ WHERE user_id = {?} AND perms = 'pending'", $user->id());
+ if (!$res->fetchOneCell()) {
+ $page->kill("Cet utilisateur est déjà inscrit au site.");
+ }
- if (list($nom, $prenom, $promo) = $res->fetchOneRow()) {
- $page->assign('prenom', $prenom);
- $page->assign('nom', $nom);
- $page->assign('promo', $promo);
+ // Displays the page, and handles the eventual user actions.
+ $page->assign('full_name', $user->fullName());
+ $page->assign('promo', $user->promo());
- if (Post::has('valide')) {
- S::assert_xsrf_token();
- $email = trim(Post::v('mail'));
+ if (Post::has('valide')) {
+ S::assert_xsrf_token();
+ $email = trim(Post::v('mail'));
+
+ require_once 'emails.inc.php';
+ if (!isvalid_email_redirection($email)) {
+ $page->trigError("Email invalide !");
+ } else {
+ // On cherche les marketings précédents sur cette adresse
+ // email, en se restreignant au dernier mois
- require_once 'emails.inc.php';
- if (!isvalid_email_redirection($email)) {
- $page->trigError("Email invalide !");
+ if (Marketing::get($user->id(), $email, true)) {
+ $page->assign('already', true);
} else {
- // On cherche les marketings précédents sur cette adresse
- // email, en se restreignant au dernier mois
-
- if (Marketing::get($uid, $email, true)) {
- $page->assign('already', true);
- } else {
- $page->assign('ok', true);
- check_email($email, "Une adresse surveillée est proposée au marketing par " . S::v('forlife'));
- $market = new Marketing($uid, $email, 'default', null, Post::v('origine'), S::v('uid'));
- $market->add();
- }
+ $page->assign('ok', true);
+ check_email($email, "Une adresse surveillée est proposée au marketing par " . S::user()->login());
+ $market = new Marketing($user->id(), $email, 'default', null, Post::v('origine'), S::v('uid'));
+ $market->add();
}
}
}
}
if (Post::has('send')) {
$res = XDB::query("SELECT hash FROM newsletter_ins WHERE user_id = {?}", S::i('uid'));
- $nl->sendTo(S::v('prenom'), S::v('nom'),
- S::v('bestalias'), S::v('femme'),
- S::v('mail_fmt') != 'texte',
+ $nl->sendTo(S::user()->login(), S::user()->bestEmail(),
+ S::v('prenom'), S::v('nom'),
+ S::v('femme'), S::v('mail_fmt') != 'texte',
$res->fetchOneCell());
}
}
$page->assign('art', $art);
} elseif (Post::has('valid')) {
require_once('validations.inc.php');
- $art = new NLReq(S::v('uid'), Post::v('title'),
+ $art = new NLReq(S::user(), Post::v('title'),
Post::v('body'), Post::v('append'));
$art->submit();
$page->assign('submited', true);
// updates the Google Apps password as well.
if ($globals->mailstorage->googleapps_domain) {
require_once 'googleapps.inc.php';
- $account = new GoogleAppsAccount(S::v('uid'), S::v('forlife'));
+ $account = new GoogleAppsAccount(S::user());
if ($account->active() && $account->sync_password) {
$account->set_password($password);
}
// updates the Google Apps password as well.
if ($globals->mailstorage->googleapps_domain) {
require_once 'googleapps.inc.php';
- $account = new GoogleAppsAccount($uid);
+ $account = new GoogleAppsAccount(User::getSilent($uid));
if ($account->active() && $account->sync_password) {
$account->set_password($password);
}
function handler_exit(&$page, $level = null)
{
if (S::has('suid')) {
- $a4l = S::v('forlife');
$suid = S::v('suid');
$log = S::v('log');
- S::logger()->log("suid_stop", S::v('forlife') . " by " . $suid['forlife']);
+ S::logger()->log("suid_stop", S::user()->login() . " by " . $suid['hruid']);
Platal::session()->stopSUID();
- pl_redirect('admin/user/' . $a4l);
+ pl_redirect('admin/user/' . S::user()->login());
}
if ($level == 'forget' || $level == 'forgetall') {
function handler_photo(&$page, $x = null, $req = null)
{
- if (is_null($x)) {
+ if (!$x || !($user = User::getSilent($x))) {
return PL_NOT_FOUND;
}
- $res = XDB::query("SELECT id, pub FROM aliases
- LEFT JOIN photo ON(id = uid)
- WHERE alias = {?}", $x);
- list($uid, $photo_pub) = $res->fetchOneRow();
+ // Retrieve the photo and its mime type.
+ $photo_data = null;
+ $photo_type = null;
if ($req && S::logged()) {
include 'validations.inc.php';
- $myphoto = PhotoReq::get_request($uid);
- Header('Content-type: image/'.$myphoto->mimetype);
- echo $myphoto->data;
+ $myphoto = PhotoReq::get_request($user->id());
+ if ($myphoto) {
+ $photo_data = $myphoto->data;
+ $photo_type = $myphoto->mimetype;
+ }
} else {
$res = XDB::query(
- "SELECT attachmime, attach
+ "SELECT attachmime, attach, pub
FROM photo
- WHERE uid={?}", $uid);
-
- if ((list($type, $data) = $res->fetchOneRow())
- && ($photo_pub == 'public' || S::logged())) {
- Header("Content-type: image/$type");
- echo $data;
- } else {
- Header('Content-type: image/png');
- echo file_get_contents(dirname(__FILE__).'/../htdocs/images/none.png');
+ WHERE uid = {?}", $user->id());
+ list($photo_type, $photo_data, $photo_pub) = $res->fetchOneRow();
+ if ($photo_pub != 'public' && !S::logged()) {
+ $photo_type = $photo_data = null;
}
}
+
+ // Display the photo, or a default one when not available.
+ if ($photo_type && $photo_data != null) {
+ header('Content-type: image/' . $photo_type);
+ echo $photo_data;
+ } else {
+ header('Content-type: image/png');
+ echo file_get_contents(dirname(__FILE__).'/../htdocs/images/none.png');
+ }
exit;
}
require_once('validations.inc.php');
- $trombi_x = '/home/web/trombino/photos'.S::v('promo')
- .'/'.S::v('forlife').'.jpg';
-
+ $trombi_x = '/home/web/trombino/photos' . S::v('promo') . '/' . S::user()->login() . '.jpg';
if (Env::has('upload')) {
S::assert_xsrf_token();
- $upload = new PlUpload(S::v('forlife'), 'photo');
+ $upload = new PlUpload(S::user()->login(), 'photo');
if (!$upload->upload($_FILES['userfile']) && !$upload->download(Env::v('photo'))) {
$page->trigError('Une erreur est survenue lors du téléchargement du fichier');
} else {
- $myphoto = new PhotoReq(S::v('uid'), $upload);
+ $myphoto = new PhotoReq(S::user(), $upload);
if ($myphoto->isValid()) {
$myphoto->submit();
}
} elseif (Env::has('trombi')) {
S::assert_xsrf_token();
- $upload = new PlUpload(S::v('forlife'), 'photo');
+ $upload = new PlUpload(S::user()->login(), 'photo');
if ($upload->copyFrom($trombi_x)) {
- $myphoto = new PhotoReq(S::v('uid'), $upload);
+ $myphoto = new PhotoReq(S::user(), $upload);
if ($myphoto->isValid()) {
$myphoto->commit();
$myphoto->clean();
function handler_profile(&$page, $x = null)
{
+ // TODO/note for upcoming developers:
+ // We currently maintain both $user and $login; $user is the old way of
+ // obtaining information, and eventually everything will be loaded
+ // through $login. That is the reason why in the template $user is named
+ // $x, and $login $user (sorry for the confusion).
+
+ // Determines which user to display the profile of, and retrieves basic
+ // information on this user.
if (is_null($x)) {
return PL_NOT_FOUND;
}
- global $globals;
- require_once 'user.func.inc.php';
+ $login = S::logged() ? User::get($x) : User::getSilent($x);
+ if (!$login) {
+ return PL_NOT_FOUND;
+ }
+ // Now that we know this is the profile of an existing user, we can
+ // switch to the appropriate template.
$page->changeTpl('profile/profile.tpl', SIMPLE);
+ require_once 'user.func.inc.php';
- $view = 'private';
- if (!S::logged() || Env::v('view') == 'public') $view = 'public';
- if (S::logged() && Env::v('view') == 'ax') $view = 'ax';
-
- if (is_numeric($x)) {
- $res = XDB::query(
- "SELECT alias
- FROM aliases AS a
- INNER JOIN auth_user_md5 AS u ON (a.id=u.user_id AND a.type='a_vie')
- WHERE matricule={?}", $x);
- $login = $res->fetchOneCell();
+ // Determines the access level at which the profile will be displayed.
+ if (!S::logged() || Env::v('view') == 'public') {
+ $view = 'public';
+ } else if (S::logged() && Env::v('view') == 'ax') {
+ $view = 'ax';
} else {
- $login = get_user_forlife($x, S::logged() ? '_default_user_callback'
- : '_silent_user_callback');
+ $view = 'private';
}
- if (empty($login)) {
- $user = get_not_registered_user($x, true);
- if ($user->total() != 1) {
- return PL_NOT_FOUND;
- }
- $user = $user->next();
+ // Determines is the user is registered, and fetches the user infos in
+ // the appropriate way.
+ $res = XDB::query("SELECT perms IN ('admin','user','disabled')
+ FROM auth_user_md5
+ WHERE user_id = {?}", $login->id());
+ if ($res->fetchOneCell()) {
+ $new = Env::v('modif') == 'new';
+ $user = get_user_details($login->login(), S::v('uid'), $view);
+ } else {
+ $new = false;
+ $user = array();
if (S::logged()) {
- pl_redirect('marketing/public/' . $user['user_id']);
+ pl_redirect('marketing/public/' . $login->login());
}
- $user['forlife'] = $x;
- } else {
- $new = Env::v('modif') == 'new';
- $user = get_user_details($login, S::v('uid'), $view);
}
+ // Profile view are logged.
if (S::logged()) {
- S::logger()->log('view_profile', $login);
+ S::logger()->log('view_profile', $login->login());
}
- $title = $user['prenom'] . ' ' . ( empty($user['nom_usage']) ? $user['nom'] : $user['nom_usage'] );
- $page->setTitle($title);
+ // Sets the title of the html page.
+ $page->setTitle($login->fullName());
- // photo
-
- $photo = 'photo/'.$user['forlife'].($new ? '/req' : '');
+ // Prepares the display of the user's mugshot.
+ $photo = 'photo/' . $login->login() . ($new ? '/req' : '');
+ if (!isset($user['photo_pub']) || !has_user_right($user['photo_pub'], $view)) {
+ $photo = "";
+ }
+ $page->assign('photo_url', $photo);
if (!isset($user['y']) and !isset($user['x'])) {
list($user['x'], $user['y']) = getimagesize("images/none.png");
$user['x'] = 160;
}
- $page->assign('logged', has_user_right('private', $view));
- if (!has_user_right($user['photo_pub'], $view)) {
- $photo = "";
- }
-
- $page->assign_by_ref('x', $user);
- $page->assign('photo_url', $photo);
- // alias virtual
+ // Determines and displays the virtual alias.
+ global $globals;
$res = XDB::query(
- "SELECT alias
- FROM virtual
- INNER JOIN virtual_redirect USING(vid)
- INNER JOIN auth_user_quick ON ( user_id = {?} AND emails_alias_pub = 'public' )
- WHERE ( redirect={?} OR redirect={?} )
- AND alias LIKE '%@{$globals->mail->alias_dom}'",
- $user['user_id'],
- $user['forlife'].'@'.$globals->mail->domain,
- $user['forlife'].'@'.$globals->mail->domain2);
+ "SELECT alias
+ FROM virtual
+ INNER JOIN virtual_redirect USING (vid)
+ INNER JOIN auth_user_quick ON (user_id = {?} AND emails_alias_pub = 'public')
+ WHERE (redirect={?} OR redirect={?})
+ AND alias LIKE '%@{$globals->mail->alias_dom}'",
+ $login->id(),
+ $login->forlifeEmail(),
+ // TODO(vzanotti): get ride of all @m4x.org addresses in the
+ // virtual redirect base, and remove this über-ugly hack.
+ $login->login() . '@' . $globals->mail->domain2);
$page->assign('virtualalias', $res->fetchOneCell());
+
+ // Adds miscellaneous properties to the display.
+ // Adds the global user property array to the display.
+ $page->assign_by_ref('x', $user);
+ $page->assign_by_ref('user', $login);
+ $page->assign('logged', has_user_right('private', $view));
$page->assign('view', $view);
$page->addJsLink('close_on_esc.js');
- header('Last-Modified: ' . date('r', strtotime($user['date'])));
+ if (isset($user['date'])) {
+ header('Last-Modified: ' . date('r', strtotime($user['date'])));
+ }
}
function handler_ax(&$page, $user = null)
{
- require_once 'user.func.inc.php';
- $user = get_user_forlife($user);
+ $user = User::get($user);
if (!$user) {
return PL_NOT_FOUND;
}
- $res = XDB::query('SELECT matricule_ax
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.type = "a_vie" AND a.id = u.user_id)
- WHERE a.alias = {?}', $user);
+
+ $res = XDB::query("SELECT matricule_ax
+ FROM auth_user_md5
+ WHERE user_id = {?}", $user->id());
$mat = $res->fetchOneCell();
if (!intval($mat)) {
- $page->kill("Le matricule AX de $user est inconnu");
+ $page->kill("Le matricule AX de {$user->login()} est inconnu");
}
http_redirect("http://www.polytechniciens.com/?page=AX_FICHE_ANCIEN&anc_id=$mat");
}
$page->assign('promo_sortie', $promo_sortie);
if (Env::has('submit')) {
- $myorange = new OrangeReq(S::v('uid'),
- $promo_sortie);
+ $myorange = new OrangeReq(S::user(), $promo_sortie);
$myorange->submit();
$page->assign('myorange', $myorange);
}
if ($reason == 'other') {
$reason = Env::v('other_reason');
}
- $myusage = new UsageReq(S::v('uid'), $nom_usage, $reason);
+ $myusage = new UsageReq(S::user(), $nom_usage, $reason);
$myusage->submit();
$page->assign('myusage', $myusage);
}
$vcard->show();
}
- function handler_admin_trombino(&$page, $uid = null, $action = null) {
+ function handler_admin_trombino(&$page, $login = null, $action = null) {
$page->changeTpl('profile/admin_trombino.tpl');
$page->setTitle('Administration - Trombino');
- $page->assign('uid', $uid);
- $q = XDB::query(
- "SELECT a.alias,promo
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON ( u.user_id = a.id AND type='a_vie' )
- WHERE user_id = {?}", $uid);
- list($forlife, $promo) = $q->fetchOneRow();
+ if (!$login || !($user = User::get($login))) {
+ return PL_NOT_FOUND;
+ } else {
+ $page->assign_by_ref('user', $user);
+ }
switch ($action) {
case "original":
header("Content-type: image/jpeg");
- readfile("/home/web/trombino/photos".$promo."/".$forlife.".jpg");
+ readfile("/home/web/trombino/photos" . $user->promo() . "/" . $user->login() . ".jpg");
exit;
break;
unlink($_FILES['userfile']['tmp_name']);
XDB::execute(
"REPLACE INTO photo SET uid={?}, attachmime = {?}, attach={?}, x={?}, y={?}",
- $uid, $mimetype, $data, $x, $y);
+ $user->id(), $mimetype, $data, $x, $y);
break;
case "delete":
S::assert_xsrf_token();
- XDB::execute('DELETE FROM photo WHERE uid = {?}', $uid);
+ XDB::execute('DELETE FROM photo WHERE uid = {?}', $user->id());
break;
}
-
- $page->assign('forlife', $forlife);
}
function handler_admin_binets(&$page, $action = 'list', $id = null) {
$page->setTitle('Administration - Binets');
// Add new ones
foreach ($value as $id=>&$val) {
if (!isset($orig[$id]) || $orig[$id]['grade'] != $val['grade']) {
- $req = new MedalReq(S::i('uid'), $id, $val['grade']);
+ $req = new MedalReq(S::user(), $id, $val['grade']);
$req->submit();
}
}
}
require_once('emails.inc.php');
- $redirect = new Redirect($uid);
+ $user = User::getSilent($uid);
+ $redirect = new Redirect($user);
$redirect->add_email($email);
// on cree un objet logger et on log l'inscription
S::v('uid'));
// If GoogleApps is enabled, and the user did choose to use synchronized passwords,
- // and if the (stupid) user has decided to user /register/success another time,
+ // and if the (stupid) user has decided to use /register/success another time,
// updates the Google Apps password as well.
if ($globals->mailstorage->googleapps_domain) {
require_once 'googleapps.inc.php';
- $account = new GoogleAppsAccount(S::v('uid'), S::v('forlife'));
+ $account = new GoogleAppsAccount(S::user());
if ($account->active() && $account->sync_password) {
$account->set_password($password);
}
global $globals;
extract ($sub);
- $mailorg = make_username($prenom, $nom);
+ $mailorg = make_username($prenom, $nom);
$mailorg2 = $mailorg.sprintf(".%02u", ($promo%100));
- $forlife = make_forlife($prenom, $nom, $promo);
- $res = XDB::query('SELECT COUNT(*) FROM aliases WHERE alias={?}', $forlife);
- if ($res->fetchOneCell() > 0) {
- return "Tu as un homonyme dans ta promo, il faut traiter ce cas manuellement.<br />".
- "envoie un mail à <a href=\"mailto:support@{$globals->mail->domain}</a>\">" .
- "support@{$globals->mail->domain}</a> en expliquant ta situation.";
+ $res = XDB::query("SELECT hruid FROM auth_user_md5 WHERE user_id = {?}", $uid);
+ if ($res->numRows() == 0) {
+ return "Tu n'as pas d'adresse à vie pré-attribuée.<br />"
+ . "Envoie un mail à <a href=\"mailto:support@{$globals->mail->domain}</a>\">" .
+ . "support@{$globals->mail->domain}</a> en expliquant ta situation.";
+ } else {
+ // TODO: at the moment forlife == hruid, however we'll have to change
+ // that behaviour when masters will be on plat/al.
+ $forlife = $res->fetchOneCell();
}
- $res = XDB::query('SELECT id, type, expire FROM aliases WHERE alias={?}', $mailorg);
-
- if ( $res->numRows() ) {
-
+ $res = XDB::query('SELECT id, type, expire FROM aliases WHERE alias={?}', $mailorg);
+ if ($res->numRows()) {
list($h_id, $h_type, $expire) = $res->fetchOneRow();
-
- if ( $h_type != 'homonyme' and empty($expire) ) {
+ if ($h_type != 'homonyme' and empty($expire)) {
XDB::execute('UPDATE aliases SET expire=ADDDATE(NOW(),INTERVAL 1 MONTH) WHERE alias={?}', $mailorg);
XDB::execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $h_id);
XDB::execute('REPLACE INTO homonymes (homonyme_id,user_id) VALUES ({?},{?})', $h_id, $uid);
$list .= '|admin|adm|ax';
}
if (preg_match('/^(' . $list . '):([-a-z]+(\.[-a-z]+(\.\d{2,4})?)?)$/', replace_accent($quick), $matches)) {
- $forlife = $matches[2];
+ $login = $matches[2];
switch($matches[1]) {
case 'admin': case 'adm':
$base = 'admin/user/';
break;
}
- require_once 'user.func.inc.php';
- $login = get_user_forlife($forlife, '_silent_user_callback');
- if ($login) {
- pl_redirect($base . $login);
+ $user = User::getSilent($login);
+ if ($user) {
+ pl_redirect($base . $user->login());
}
$_REQUEST['quick'] = $forlife;
$_GET['quick'] = $forlife;
public function proposeSurvey()
{
require_once 'validations.inc.php';
- $surveyreq = new SurveyReq($this->title, $this->description, $this->end, $this->mode, $this->promos, $this->questions, S::v('uid'));
+ $surveyreq = new SurveyReq($this->title, $this->description, $this->end, $this->mode, $this->promos, $this->questions, S::user());
return $surveyreq->submit();
}
// }}}
// request for a new payment
if (Post::v('paiement_id') == -1 && $money_defaut >= 0) {
require_once 'validations.inc.php';
- $p = new PayReq(S::v('uid'),
+ $p = new PayReq(S::user(),
Post::v('intitule')." - ".$globals->asso('nom'),
Post::v('site'), $money_defaut,
Post::v('confirmation'), 0, 999,
// {{{ function subscribe_lists_event()
function subscribe_lists_event($participate, $uid, $evt)
{
- require_once('user.func.inc.php');
global $globals;
$page =& Platal::page();
$participant_list = $evt['participant_list'];
$absent_list = $evt['absent_list'];
- $email = get_user_forlife($uid, '_silent_user_callback');
-
- if ($email) {
- $email .= '@'.$globals->mail->domain;
+ $user = User::getSilent($uid);
+ if ($user) {
+ $email = $user->forlifeEmail();
} else {
$res = XDB::query("SELECT email
FROM groupex.membres
Env::i('unread'), S::i('uid'));
pl_redirect("#art" . Env::i('unread'));
}
- $arts = XDB::iterator("SELECT a.*, u.nom, u.prenom, u.promo, l.alias AS forlife,
+ $arts = XDB::iterator("SELECT a.*, u.nom, u.prenom, u.promo, u.hruid,
FIND_IN_SET('photo', a.flags) AS photo
FROM groupex.announces AS a
INNER JOIN auth_user_md5 AS u USING(user_id)
- INNER JOIN aliases AS l ON (u.user_id = l.id AND l.type = 'a_vie')
LEFT JOIN groupex.announces_read AS r ON (r.user_id = {?} AND r.announce_id = a.id)
WHERE asso_id = {?} AND peremption >= CURRENT_DATE()
AND (promo_min = 0 OR promo_min <= {?})
$platal->ns . "rss/rss.xml");
} else {
$page->setRssLink("Polytechnique.net :: {$globals->asso("nom")} :: News",
- $platal->ns . 'rss/'.S::v('forlife') .'/'.S::v('core_rss_hash').'/rss.xml');
+ $platal->ns . 'rss/'.S::v('hruid') .'/'.S::v('core_rss_hash').'/rss.xml');
}
$page->assign('articles', $arts);
$this->load('mail.inc.php');
set_time_limit(120);
$tos = get_all_redirects($mbr, $mls, $mmlist);
- $upload = PlUpload::get($_FILES['uploaded'], S::v('forlife'), 'xnet.emails', true);
+ $upload = PlUpload::get($_FILES['uploaded'], S::user()->login(), 'xnet.emails', true);
send_xnet_mails($from, $sujet, $body, Env::v('wiki'), $tos, Post::v('replyto'), $upload, @$_FILES['uploaded']['name']);
if ($upload) {
$upload->rm();
$globals->asso('id'), $uid);
}
- private function validSubscription($nom, $prenom, $sexe, $uid, $forlife)
+ private function validSubscription(User &$user)
{
global $globals;
- $this->removeSubscriptionRequest($uid);
+ $this->removeSubscriptionRequest($user->id());
XDB::execute("INSERT INTO groupex.membres (asso_id, uid)
VALUES ({?}, {?})",
- $globals->asso('id'), $uid);
+ $globals->asso('id'), $user->id());
$mailer = new PlMailer();
- $mailer->addTo("$forlife@polytechnique.org");
- $mailer->setFrom('"' . S::v('prenom') . ' ' . S::v('nom')
- . '" <' . S::v('forlife') . '@polytechnique.org>');
+ $mailer->addTo($user->forlifeEmail());
+ $mailer->setFrom('"' . S::user()->fullName() . '" <' . S::user()->forlifeEmail() . '>');
$mailer->setSubject('[' . $globals->asso('nom') . '] Demande d\'inscription');
- $message = ($sexe ? 'Chère' : 'Cher') . " Camarade,\n"
+ $message = ($user->isFemale() ? 'Chère' : 'Cher') . " Camarade,\n"
. "\n"
. " Suite à ta demande d'adhésion à " . $globals->asso('nom') . ",\n"
. "j'ai le plaisir de t'annoncer que ton inscription a été validée !\n"
. "\n"
. "Bien cordialement,\n"
. "-- \n"
- . S::s('prenom') . ' ' . S::s('nom') . '.';
+ . S::user()->fullName() . '.';
$mailer->setTxtBody($message);
$mailer->send();
}
."sur la page de présentation.");
if (!is_null($u) && may_update()) {
- $page->assign('u', $u);
- $res = XDB::query("SELECT u.nom, u.prenom, u.promo, u.user_id, FIND_IN_SET('femme', u.flags), s.reason
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS al ON (al.id = u.user_id AND al.type != 'liste')
- LEFT JOIN groupex.membres_sub_requests AS s ON (u.user_id = s.uid AND s.asso_id = {?})
- WHERE al.alias = {?}", $globals->asso('id'), $u);
-
- if (list($nom, $prenom, $promo, $uid, $sexe, $reason) = $res->fetchOneRow()) {
- $res = XDB::query("SELECT COUNT(*)
- FROM groupex.membres AS m
- INNER JOIN aliases AS a ON (m.uid = a.id AND a.type != 'homonyme')
- WHERE a.alias = {?} AND m.asso_id = {?}",
- $u, $globals->asso('id'));
- $n = $res->fetchOneCell();
- if ($n) {
- $this->removeSubscriptionRequest($uid);
- $page->kill("$prenom $nom est déjà membre du groupe !");
- return;
- } elseif (Env::has('accept')) {
- S::assert_xsrf_token();
-
- $this->validSubscription($nom, $prenom, $sexe, $uid, $u);
- pl_redirect("member/$u");
- } elseif (Env::has('refuse')) {
- S::assert_xsrf_token();
-
- $this->removeSubscriptionRequest($uid);
- $mailer = new PlMailer();
- $mailer->addTo("$u@polytechnique.org");
- $mailer->setFrom('"'.S::v('prenom').' '.S::v('nom')
- .'" <'.S::v('forlife').'@polytechnique.org>');
- $mailer->setSubject('['.$globals->asso('nom').'] Demande d\'inscription annulée');
- $mailer->setTxtBody(Env::v('motif'));
- $mailer->send();
- $page->kill("La demande de $prenom $nom a bien été refusée.");
- } else {
- $page->assign('show_form', true);
- $page->assign('prenom', $prenom);
- $page->assign('nom', $nom);
- $page->assign('promo', $promo);
- $page->assign('uid', $uid);
- $page->assign('reason', $reason);
- }
- return;
+ $user = User::get($u);
+ if (!$user) {
+ return PL_NOT_FOUND;
+ } else {
+ $page->assign('user', $user);
}
- return PL_NOT_FOUND;
+
+ // Retrieves the subscription status, and the reason.
+ $res = XDB::query("SELECT reason
+ FROM groupex.membres_sub_requests
+ WHERE asso_id = {?} AND uid = {?}",
+ $globals->asso('id'), $user->id());
+ $reason = ($res->numRows() ? $res->fetchOneCell() : null);
+
+ $res = XDB::query("SELECT COUNT(*)
+ FROM groupex.membres
+ WHERE asso_id = {?} AND uid = {?}",
+ $globals->asso('id'), $user->id());
+ $already_member = ($res->fetchOneCell() > 0);
+
+ // Handles the membership request.
+ if ($already_member) {
+ $this->removeSubscriptionRequest($user->id());
+ $page->kill($user->fullName() . " est déjà membre du groupe !");
+ } elseif (Env::has('accept')) {
+ S::assert_xsrf_token();
+
+ $this->validSubscription($user);
+ pl_redirect("member/" . $user->login());
+ } elseif (Env::has('refuse')) {
+ S::assert_xsrf_token();
+
+ $this->removeSubscriptionRequest($user->id());
+ $mailer = new PlMailer();
+ $mailer->addTo($user->forlifeEmail());
+ $mailer->setFrom('"' . S::user()->fullName() . '" <' . S::user()->forlifeEmail() . '>');
+ $mailer->setSubject('['.$globals->asso('nom').'] Demande d\'inscription annulée');
+ $mailer->setTxtBody(Env::v('motif'));
+ $mailer->send();
+ $page->kill("La demande de {$user->fullName()} a bien été refusée.");
+ } else {
+ $page->assign('show_form', true);
+ $page->assign('reason', $reason);
+ }
+ return;
}
if (is_member()) {
$append = "\n"
. "-- \n"
. "Ce message a été envoyé suite à la demande d'inscription de\n"
- . S::v('prenom').' '.S::v('nom').' (X'.S::v('promo').")\n"
+ . S::user()->fullName() . ' (X' . S::v('promo') . ")\n"
. "Via le site www.polytechnique.net. Tu peux choisir de valider ou\n"
. "de refuser sa demande d'inscription depuis la page :\n"
- .
- "http://www.polytechnique.net/".$globals->asso("diminutif")."/subscribe/"
- .S::v('forlife')."\n"
+ . "http://www.polytechnique.net/" . $globals->asso("diminutif") . "/subscribe/" . S::user()->login() . "\n"
. "\n"
. "En cas de problème, contacter l'équipe de Polytechnique.org\n"
. "à l'adresse : support@polytechnique.org\n";
$mailer = new PlMailer();
$mailer->addTo($to);
- $mailer->setFrom('"'.S::v('prenom').' '.S::v('nom')
- .'" <'.S::v('forlife').'@polytechnique.org>');
+ $mailer->setFrom('"' . S::user()->fullName() . '" <' . S::user()->forlifeEmail() . '>');
$mailer->setSubject('['.$globals->asso('nom').'] Demande d\'inscription');
$mailer->setTxtBody(Post::v('message').$append);
$mailer->send();
$subs = Post::v('subs');
if (is_array($subs)) {
$users = array();
- foreach ($subs as $forlife => $val) {
+ foreach ($subs as $hruid => $val) {
if ($val == '1') {
- $res = XDB::query("SELECT IF(u.nom_usage != '', u.nom_usage, u.nom) AS u,
- u.prenom, FIND_IN_SET('femme', u.flags) AS sexe,
- u.user_id
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (a.id = u.user_id)
- WHERE a.alias = {?}", $forlife);
- if ($res->numRows() == 1) {
- list($nom, $prenom, $sexe, $uid) = $res->fetchOneRow();
- $this->validSubscription($nom, $prenom, $sexe, $uid, $forlife);
+ $user = User::get($hruid);
+ if ($user) {
+ $this->validSubscription($user);
}
}
}
}
$it = XDB::iterator("SELECT IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom,
- u.prenom, u.promo, a.alias AS forlife, s.ts AS date
+ u.prenom, u.promo, u.hruid, s.ts AS date
FROM groupex.membres_sub_requests AS s
INNER JOIN auth_user_md5 AS u ON (s.uid = u.user_id)
- INNER JOIN aliases AS a ON (a.id = s.uid AND a.type = 'a_vie')
WHERE asso_id = {?}
ORDER BY nom, prenom",
$globals->asso('id'));
S::assert_xsrf_token();
}
- if (strpos($email, '@') === false) {
- $x = true;
- } else {
- list(,$fqdn) = explode('@', $email, 2);
- $fqdn = strtolower($fqdn);
- $x = ($fqdn == 'polytechnique.org' || $fqdn == 'melix.org' ||
- $fqdn == 'm4x.org' || $fqdn == 'melix.net');
- }
- if ($x) {
- require_once 'user.func.inc.php';
- if ($forlife = get_user_forlife($email)) {
- XDB::execute(
- 'INSERT INTO groupex.membres (uid,asso_id,origine)
- SELECT user_id,{?},"X"
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON (u.user_id = a.id)
- WHERE a.alias={?}', $globals->asso('id'), $forlife);
- pl_redirect("member/$forlife");
- } else {
- $page->trigError($email." n'est pas un alias polytechnique.org valide.");
+ if (!User::isForeignEmailAddress($email)) {
+ $user = User::get($email);
+ if ($user) {
+ XDB::execute("REPLACE INTO groupex.membres (uid, asso_id, origine)
+ VALUES ({?}, {?}, 'X')",
+ $user->id(), $globals->asso('id'));
+ pl_redirect("member/" . $user->login());
}
} else {
if (isvalid_email($email)) {
function handler_unsubscribe(&$page)
{
$page->changeTpl('xnetgrp/membres-del.tpl');
- $user = get_infos(S::v('forlife'));
+ $user = get_infos(S::user()->id());
if (empty($user)) {
return PL_NOT_FOUND;
}
exit;
}
} else {
- $upload = new PlUpload(S::v('forlife'), 'xnetannounce');
+ $upload = new PlUpload(S::user()->login(), 'xnetannounce');
if ($upload->exists() && $upload->isType('image')) {
header('Content-Type: ' . $upload->contentType());
echo $upload->getContents();
$art['nom'] = S::v('nom');
$art['prenom'] = S::v('prenom');
$art['promo'] = S::v('promo');
- $art['forlife'] = S::v('forlife');
+ $art['hruid'] = S::user()->login();
$art['peremption'] = Post::v('peremption');
$art['public'] = Post::has('public');
$art['xorg'] = Post::has('xorg');
$art['nl'] = Post::has('nl');
$art['event'] = Post::v('event');
- $upload = new PlUpload(S::v('forlife'), 'xnetannounce');
+ $upload = new PlUpload(S::user()->login(), 'xnetannounce');
$this->upload_image($page, $upload);
$art['contact_html'] = $art['contacts'];
$post = null;/*
if ($globals->asso('forum')) {
require_once 'banana/forum.inc.php';
- $banana = new ForumsBanana(S::v('forlife'));
+ $banana = new ForumsBanana(S::user());
$post = $banana->post($globals->asso('forum'), null,
$art['titre'], MiniWiki::wikiToText($fulltext, false, 0, 80));
}*/
if ($art['xorg']) {
require_once('validations.inc.php');
$article = new EvtReq("[{$globals->asso('nom')}] " . $art['titre'], $fulltext,
- $art['promo_min'], $art['promo_max'], $art['peremption'], "", S::v('uid'),
+ $art['promo_min'], $art['promo_max'], $art['peremption'], "", S::user(),
$upload);
$article->submit();
$page->trigWarning("L'affichage sur la page d'accueil de Polytechnique.org est en attente de validation.");
}
if ($art['nl']) {
require_once('validations.inc.php');
- $article = new NLReq(S::v('uid'), $globals->asso('nom') . " : " .$art['titre'],
+ $article = new NLReq(S::user(), $globals->asso('nom') . " : " .$art['titre'],
$art['texte'], $art['contact_html']);
$article->submit();
$page->trigWarning("La parution dans la Lettre Mensuelle est en attente de validation.");
}
if (empty($art) && !is_null($aid)) {
- $res = XDB::query("SELECT a.*, u.nom, u.prenom, u.promo, l.alias AS forlife,
+ $res = XDB::query("SELECT a.*, u.nom, u.prenom, u.promo, u.hruid,
FIND_IN_SET('public', a.flags) AS public,
FIND_IN_SET('photo', a.flags) AS photo
FROM groupex.announces AS a
INNER JOIN auth_user_md5 AS u USING(user_id)
- INNER JOIN aliases AS l ON (l.id = u.user_id AND l.type = 'a_vie')
WHERE asso_id = {?} AND a.id = {?}",
$globals->asso('id'), $aid);
if ($res->numRows()) {
$ret = $this->client->create_list(
$liste, utf8_decode(Post::v('desc')), Post::v('advertise'),
Post::v('modlevel'), Post::v('inslevel'),
- array(S::v('forlife')), array(S::v('forlife')));
+ array(S::user()->forlifeEmail()), array(S::user()->forlifeEmail()));
$dom = strtolower($globals->asso("mail_domain"));
$red = $dom.'_'.$liste;
function smarty_function_test_email($params, &$smarty) {
$label = isset($params['title']) ? $params['title'] : 'Envoyer un email de test';
- $token = "'" . S::v('xsrf_token') . (isset($params['forlife']) ? "', " : "'");
- $forlife = isset($params['forlife']) ? "'" . $params['forlife'] . "'" : '';
+ $token = "'" . S::v('xsrf_token') . (isset($params['hruid']) ? "', " : "'");
+ $hruid = isset($params['hruid']) ? "'" . $params['hruid'] . "'" : '';
return '<div class="center">'
. ' <div id="mail_sent" style="position: absolute;"></div><br />'
- . ' <form action="emails/test" method="get" onsubmit="return sendTestEmail(' . $token . $forlife . ')">'
+ . ' <form action="emails/test" method="get" onsubmit="return sendTestEmail(' . $token . $hruid . ')">'
. ' <input type="hidden" name="token" value="' . S::v('xsrf_token') . '" />'
. ' <div><input type="submit" name="send" value="' . $label . '" /></div>'
. ' </form>'
Administrer
</th>
</tr>
- {if !$smarty.request.login && !$mr.forlife}
+ {if !$smarty.request.login && !$mr.hruid}
<tr class="pair">
<td class="center">
Il est possible d'entrer ici n'importe quelle adresse email : redirection, melix, ou alias.
{/if}
<tr>
<td class="center">
- <input type="text" name="login" size="40" maxlength="255" value="{$smarty.request.login|default:$mr.forlife}" />
+ <input type="text" name="login" size="40" maxlength="255" value="{$smarty.request.login|default:$mr.hruid}" />
</td>
</tr>
<tr>
{else}
<tr class="center">
<td>
- <a href="profile/{$mr.forlife}" class="popup2">[Voir fiche]</a>
+ <a href="profile/{$mr.hruid}" class="popup2">[Voir fiche]</a>
</td>
<td>
<input onclick="doEditUser(); return true;" type="submit" name="u_edit" value="UPDATE" />
</form>
{javascript name="ajax"}
-{test_email forlife=$mr.forlife}
+{test_email hruid=$user->login()}
<form id="fwds" method="post" action="admin/user#fwds">
{xsrf_token_field}
</td>
<td>
{if $mail->broken}<span style="color: #f00">{/if}
- {if $mail->email == 'googleapps'}<a href="admin/googleapps/user/{$mr.forlife}">{/if}
+ {if $mail->email == 'googleapps'}<a href="admin/googleapps/user/{$mr.hruid}">{/if}
{$mail->display_email}
{if $mail->email == 'googleapps'}</a>{/if}
{if $mail->broken}<em> (en panne)</em></span>{/if}
<tr>
<td class="titre" style="width: 20%">Demandeur :</td>
<td>
- <a href="profile/{$valid->bestalias}" class="popup2">
- {$valid->prenom} {$valid->nom} (X{$valid->promo})
+ <a href="profile/{$valid->user->login()}" class="popup2">
+ {$valid->user->fullName()} (X{$valid->user->promo()})
</a>
</td>
</tr>
{xsrf_token_field}
<div>
{include file=$valid->editor()}
- <input type="hidden" name="uid" value="{$valid->uid}" />
+ <input type="hidden" name="uid" value="{$valid->user->id()}" />
<input type="hidden" name="type" value="{$valid->type}" />
<input type="hidden" name="stamp" value="{$valid->stamp}" />
<br />
<form action="admin/validate" method="post">
{xsrf_token_field}
<div>
- <input type="hidden" name="uid" value="{$valid->uid}" />
+ <input type="hidden" name="uid" value="{$valid->user->id()}" />
<input type="hidden" name="type" value="{$valid->type}" />
<input type="hidden" name="stamp" value="{$valid->stamp}" />
<input type="hidden" name="formid" value="{0|rand:65535}" />
Ajouté dans l'email :<br />
<textarea rows="5" cols="50" name="comm"></textarea><br />
- <input type="hidden" name="uid" value="{$valid->uid}" />
+ <input type="hidden" name="uid" value="{$valid->user->id()}" />
<input type="hidden" name="type" value="{$valid->type}" />
<input type="hidden" name="stamp" value="{$valid->stamp}" />
<input type="submit" name="accept" value="Accepter" />
</p>
<p>
Si tu connais une autre adresse email où le contacter, nous pouvons l'inviter à mettre à jour sa redirection
- Polytechnique.org. Pour ceci il suffit que tu remplisses <a href="marketing/broken/{$x.forlife}">ce formulaire</a>.
+ Polytechnique.org. Pour ceci il suffit que tu remplisses <a href="marketing/broken/{$x.hruid}">ce formulaire</a>.
</p>
{elseif $email}
<p class="erreur">
{iterate from=$lost_emails item="looser"}
<tr class="{cycle values="pair,impair"}">
<td>
- <a href="profile/{$looser.alias}" class="popup2">{$looser.alias}</a>
+ <a href="profile/{$looser.hruid}" class="popup2">{$looser.hruid}</a>
</td>
{/iterate}
</table>
{if $retour == $smarty.const.ERROR_INACTIVE_REDIRECTION}
<p class="erreur">
Tu ne peux pas avoir aucune adresse de redirection active, sinon ton adresse
- {$smarty.session.forlife}@{#globals.mail.domain#} ne fonctionnerait plus.
+ {$user->forlifeEmail()} ne fonctionnerait plus.
</p>
{/if}
{if $retour == $smarty.const.ERROR_INVALID_EMAIL}
{/if}
{if $retour == $smarty.const.ERROR_LOOP_EMAIL}
<p class="erreur">
- Erreur : {$smarty.session.forlife}@{#globals.mail.domain#} ne doit pas être renvoyé
- vers lui-même, ni vers son équivalent en {#globals.mail.domain2#} ni vers polytechnique.edu.
+ Erreur : {$user->forlifeEmail()} ne doit pas être renvoyé vers lui-même,
+ ni vers son équivalent en {#globals.mail.domain2#} ni vers polytechnique.edu.
</p>
{/if}
<h1>
L'X te fournit aussi une adresse à vie en <strong>«prenom.nom»@polytechnique.edu</strong> qui par défaut est
une redirection vers «login»@poly.polytechnique.fr. <a href="https://www.mail.polytechnique.edu/">
Tu peux modifier cette redirection</a> et la faire pointer vers ton adresse
- {$smarty.session.forlife}@{#globals.mail.domain#} (attention, cela demande de la concentration).
+ {$user->forlifeEmail()} (attention, cela demande de la concentration).
</p>
<p>
Si tu utilises le service POP de poly pour récupérer tes emails dans ton logiciel de courrier,
l'équipe de Polytechnique.org te conseille de rediriger :
</p>
<ul>
- <li>«prenom.nom»@polytechnique.edu vers {$smarty.session.forlife}@{#globals.mail.domain#} ;</li>
- <li>{$smarty.session.forlife}@{#globals.mail.domain#} vers «login»@poly.polytechnique.fr.</li>
+ <li>«prenom.nom»@polytechnique.edu vers {$user->forlifeEmail()} ;</li>
+ <li>{$user->forlifeEmail()} vers «login»@poly.polytechnique.fr.</li>
</ul>
<p>
Attention à ne pas faire une boucle quand tu manipules tes redirections ! Tes emails seraient
{to addr=$to}
{subject text="Validation de la demande de réécriture pour l'adresse `$mail->email`"}
{elseif $mail_part eq 'wiki'}
-{if $sexe}Chère{else}Cher{/if} {$prenom},
+{if $user->isFemale()}Chère{else}Cher{/if} {$user->displayName()},
Tu reçois cet email car une demande de réécriture vient d'être effectuée sur {$sitename} pour que les mails
l'adresse {$mail->email} soit automatiquement réécrite en {$mail->rewrite}.
<input type='text' name='from' size='60' value='{if $smarty.request.from}
{$smarty.request.from}
{else}
-"{$smarty.session.prenom} {$smarty.session.nom_usage|default:$smarty.session.nom}" <{$smarty.session.bestalias}@{#globals.mail.domain#}>
+"{$user->fullName()}" <{$user->bestEmail()}>
{/if}' />
</td>
</tr>
{to addr=$email}
{subject text="Test de ton adresse `$email`"}
{elseif $mail_part eq 'wiki'}
-{if $sexe}Chère{else}Cher{/if} {$prenom},
+{if $sexe}Chère{else}Cher{/if} {$display_name},
Tu reçois cet email car tu as demandé la confirmation du bon fonctionnement de ton adresse polytechnicienne {$email}.
{if count($redirects) gt 1}Si toutes tes redirections fonctionnent correctement tu devrais recevoir une copie de cet email
<tr class="pair">
<td class="titre">Récupération de</td>
- <td><a href='admin/user/{$valid->m_forlife}'>{$valid->m_prenom} {$valid->m_nom} ({$valid->m_promo})</a></td>
+ <td><a href='admin/user/{$valid->m_user->login()}'>{$valid->m_user->fullName()} ({$valid->m_user->promo()})</a></td>
</tr>
<tr class="pair">
<td class="titre">Email proposé</td>
<tr class="pair">
<td class="titre">Homonymes :</td>
<td>
- {foreach from=$valid->homonymes_forlife item=o}
+ {foreach from=$valid->homonymes_hruid item=o}
<a href='profile/{$o}' class='popup2'>{$o}</a>
{/foreach}
</td>
{/if}
<tr class="pair">
<td class="titre">Marketing sur</td>
- <td><a href='marketing/private/{$valid->m_id}'>{$valid->m_prenom} {$valid->m_nom} ({$valid->m_promo})</a></td>
+ <td><a href='marketing/private/{$valid->m_user->login()}'>{$valid->m_user->fullName()} ({$valid->m_user->promo()})</a></td>
</tr>
{if $valid->m_type neq 'default'}
<tr class="pair">
<tr class="impair">
<td class="titre">Promotion :</td>
- <td>{$valid->promo}</td>
+ <td>{$valid->user->promo()}</td>
</tr>
<tr class="impair">
<td class="titre">Année de sortie :</td>
- <td>{$valid->promo_sortie} au lieu de {math equation="a + b" a=$valid->promo b=3}</td>
+ <td>{$valid->promo_sortie} au lieu de {math equation="a + b" a=$valid->user->promo() b=3}</td>
</tr>
{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
<tr class="pair">
<td class="titre">Contact :</td>
<td>
- {$valid->bestalias}@polytechnique.org
+ {$valid->user->bestEmail()}
</td>
</tr>
<tr class="pair">
<tr class="pair">
<td class="titre">Photos</td>
<td>
- <img src="photo/{$valid->forlife}" style="width:110px;" alt=" [ PHOTO ] " />
+ <img src="photo/{$valid->user->login()}" style="width:110px;" alt=" [ PHOTO ] " />
- <img src="photo/{$valid->forlife}/req" style="width:110px;" alt=" [ PHOTO ] " />
+ <img src="photo/{$valid->user->login()}/req" style="width:110px;" alt=" [ PHOTO ] " />
</td>
</tr>
<div class="identity">
{if $smarty.session.auth ge AUTH_COOKIE}
<div class="photo">
- <img src="photo/{if $c.inscrit}{$c.forlife}{else}{make_forlife nom=$c.nom prenom=$c.prenom promo=$c.promo}{/if}"
+ <img src="photo/{$c.hruid}"
alt="{$c.prenom} {$c.nom}" />
</div>
{/if}
<div class="nom">
{if $c.sexe}•{/if}
- {if !$c.dcd && ($c.inscrit || $smarty.session.auth eq AUTH_PUBLIC)}<a href="profile/{if $c.inscrit}{$c.forlife}{else}{make_forlife nom=$c.nom prenom=$c.prenom promo=$c.promo}{/if}" class="popup2">{/if}
+ {if !$c.dcd && ($c.inscrit || $smarty.session.auth eq AUTH_PUBLIC)}<a href="profile/{$c.hruid}" class="popup2">{/if}
{if $c.nom_usage}{$c.nom_usage} {$c.prenom}<br />({$c.nom}){else}{$c.nom} {$c.prenom}{/if}
{if !$c.dcd && ($c.inscrit || $smarty.session.auth eq AUTH_PUBLIC)}</a>{/if}
</div>
*}{icon name=cross title="Retirer de la liste de mes surveillances"}</a>
{/if}
{elseif $c.wasinscrit}
- <a href="profile/{$c.forlife}" class="popup2">{*
+ <a href="profile/{$c.hruid}" class="popup2">{*
*}{icon name=user_suit title="Afficher la fiche"}</a>
{if !$c.dcd}
- <a href="vcard/{$c.forlife}.vcf">{*
+ <a href="vcard/{$c.hruid}.vcf">{*
*}{icon name=vcard title="Afficher la carte de visite"}</a>
<a href="mailto:{$c.forlife}@{#globals.mail.domain#}">{*
*}{icon name=email title="Envoyer un email"}</a>
{if $show_action eq ajouter}
- <a href="carnet/contacts?action={$show_action}&user={$c.forlife}&token={xsrf_token}">{*
+ <a href="carnet/contacts?action={$show_action}&user={$c.hruid}&token={xsrf_token}">{*
*}{icon name=add title="Ajouter à mes contacts"}</a>
{else}
- <a href="carnet/contacts?action={$show_action}&user={$c.forlife}&token={xsrf_token}">{*
+ <a href="carnet/contacts?action={$show_action}&user={$c.hruid}&token={xsrf_token}">{*
*}{icon name=cross title="Retirer de mes contacts"}</a>
{/if}
{/if}
{if hasPerm('admin')}
<div>
[{if !$c.wasinscrit && !$c.dcd}
- <a href="marketing/private/{$c.user_id}">{*
+ <a href="marketing/private/{$c.hruid}">{*
*}{icon name=email title="marketter user"}</a>
{/if}
- <a href="admin/user/{if $c.wasinscrit}{$c.forlife}{else}{$c.user_id}{/if}">{*
+ <a href="admin/user/{$c.hruid}">{*
*}{icon name=wrench title="administrer user"}</a>
<a href="http://www.polytechniciens.com/?page=AX_FICHE_ANCIEN&anc_id={$c.matricule_ax}">{*
*}{icon name=user_gray title="fiche AX"}</a>]
<td class="smaller" colspan="2">
{if !$c.wasinscrit}
Ce{if $c.sexe}tte{/if} camarade n'est pas inscrit{if $c.sexe}e{/if}.
- <a href="marketing/public/{$c.user_id}" class='popup'>Si tu connais son adresse email,
+ <a href="marketing/public/{$c.hruid}" class='popup'>Si tu connais son adresse email,
<strong>n'hésite pas à nous la transmettre !</a>
{elseif !$c.actif}
Ce{if $c.sexe}tte{/if} camarade n'a plus d'adresse de redirection valide.
- <a href="marketing/broken/{$c.forlife}">
+ <a href="marketing/broken/{$c.hruid}">
Si tu en connais une, <strong>n'hésite pas à nous la transmettre</strong>.
</a>
{/if}
{* *}
{**************************************************************************}
-
{if $sent}
<p>
Merci de nous avoir communiqué cette information !
</p>
-{elseif $user && !$user.alive}
+{elseif $user && !$user->alive}
<p class="erreur">
- {$user.prenom} {$user.nom} (X{$user.promo}) est malheureusement décédé{if $user.sexe}e{/if}.
+ {$user->fullName()} (X{$user->promo()}) est malheureusement décédé{if $user->isFemale()}e{/if}.
Nous ne réaliserons maintenance sur son adresse Polytechnique.org qu'à la demande explicite
de sa famille. Pour tout renseignement, merci de <a href="mailto:contact@polytechnique.org">
contacter le support</a>.
{elseif $user}
<h1>
- Recherche d'adresses pour {$user.nom} {$user.prenom} (X{$user.promo})
+ Recherche d'adresses pour {$user->fullName()} (X{$user->promo()}).
</h1>
-{if !$user.email}
+{if !$user->email}
<p>
Avec le temps, toutes les adresses de redirection de notre camarade sont devenues invalides et produisent
des erreurs lorsqu'on lui envoie un email. Nous sommes donc à la recherche d'adresses valides où nous pourrions
contacter ce camarade.
</p>
-{elseif $user.last}
+{elseif $user->last}
<p>
- {$user.prenom} a encore des adresses de redirection actives malgré des pannes détectées sur certaines d'entre elles. Si
+ {$user->fullName()} a encore des adresses de redirection actives malgré des pannes détectées sur certaines d'entre elles. Si
tu es sûr{if $smarty.session.femme}e{/if} que son adresse Polytechnique.org est en panne, tu peux proposer une nouvelle
adresse email à ajouter à ses redirections. Merci d'ajouter un commentaire pour nous indiquer la raison de cette proposition.
</p>
{else}
<p>
- Nous n'avons actuellement enregistré aucune panne sur les adresses de redirection de {$user.prenom}. Si tu es
+ Nous n'avons actuellement enregistré aucune panne sur les adresses de redirection de {$user->fullName()}. Si tu es
sûr{if $smarty.session.femme}e{/if} que son adresse de redirection actuelle est en panne, tu peux nous proposer
une nouvelle adresse, accompagnée d'un commentaire nous expliquant les raisons exactes de cette proposition.
</p>
{/if}
<p>
- Les adresses email que tu pourras nous donner ne seront pas ajoutées directement aux redirections de {$user.prenom}.
- Nous allons d'abord prendre contact avec {if $user.sexe}elle{else}lui{/if} pour savoir {if $user.sexe}si elle {else}s'il {/if}
- accepte la mise à jour de sa redirection.
+ Les adresses email que tu pourras nous donner ne seront pas ajoutées directement aux redirections de {$user->fullName()}.
+ Nous allons d'abord prendre contact avec {if $user->isFemale()}elle{else}lui{/if} pour savoir {if $user->isFemale()}si elle
+ {else}s'il {/if} accepte la mise à jour de sa redirection.
</p>
<p>
Merci de ta participation active à l'amélioration de notre qualité de service.
<form method="post" action="{$platal->path}">
{xsrf_token_field}
<table class="bicol" summary="Fiche camarade">
- <tr><th colspan="2">Proposition d'adresse pour<br />{$user.nom} {$user.prenom} (X{$user.promo})</th></tr>
+ <tr><th colspan="2">Proposition d'adresse pour<br />{$user->fullName()} (X{$user->promo()})</th></tr>
<tr class="pair">
<td>Adresse email :</td>
<td>
<input type="text" name="mail" size="30" maxlength="50" value="{$smarty.post.mail}" />
</td>
</tr>
- {if $user.email}
+ {if $user->email}
<tr class="impair">
<td>Explication :</td>
<td><textarea name="comment" cols="50" rows="4">{$smarty.post.comment}</textarea></td>
{#globals.baseurl#}/register/%%hash%%
==========================================================
-Il ne te faut que 5 minutes sur https://www.polytechnique.org/ pour rejoindre la communauté polytechnicienne sur le web grâce aux services de Polytechnique.org dont profitent déjà {$num_users} camarades. Cela te permettra, entre autres, de contacter un X en connaissant seulement son nom et son prénom et de bénéficier à vie d'une adresse prestigieuse {$u.forlife}@polytechnique.org et de son alias discret {$u.forlife}@m4x.org (m4x = mail for X).
+Il ne te faut que 5 minutes sur https://www.polytechnique.org/ pour rejoindre la communauté polytechnicienne sur le web grâce aux services de Polytechnique.org dont profitent déjà {$num_users} camarades. Cela te permettra, entre autres, de contacter un X en connaissant seulement son nom et son prénom et de bénéficier à vie d'une adresse prestigieuse {$u.forlife_email} et de son alias discret {$u.forlife_email2} (m4x = mail for X).
Pas de nouvelle boîte aux lettres à relever, il suffit de la rediriger vers ton adresse personnelle et/ou professionnelle que tu indiques et que tu peux changer à ta guise, sans que tes correspondants n'aient à actualiser leur carnet d'adresses.
{* *}
{**************************************************************************}
-<h1>Marketing de {$prenom} {$nom}</h1>
+<h1>Marketing de {$full_name}</h1>
<h2>Matricules</h2>
Merci de nous avoir communiqué cette information !
</p>
<p>
-Nous avions déjà connaissance de cette adresse, nous espérons donc comme toi que {$prenom} va s'inscrire au plus vite.
+Nous avions déjà connaissance de cette adresse, nous espérons donc comme toi que {$full_name} va s'inscrire au plus vite.
</p>
<p>
Si tu le connais personnellement, un petit email pour lui expliquer les atouts de Polytechnique.org
<p>
Merci de nous avoir communiqué cette information ! Un administrateur de Polytechnique.org va
- envoyer un email de proposition d'inscription à Polytechnique.org à {$prenom} {$nom} dans les
+ envoyer un email de proposition d'inscription à Polytechnique.org à {$full_name} dans les
toutes prochaines heures (ceci est fait à la main pour vérifier qu'aucun utilisateur malveillant
ne fasse mauvais usage de cette fonctionnalité...).
</p>
<p>
<strong>Merci de ton aide à la reconnaissance de notre site !</strong> Tu seras informé par email de
- l'inscription de {$prenom} {$nom} si notre camarade accepte de rejoindre la communauté des X sur
+ l'inscription de {$full_name} si notre camarade accepte de rejoindre la communauté des X sur
le web !
</p>
{else}
-{if $prenom}
+{if $full_name}
<h1>
- Et si nous proposions à {$prenom} {$nom} de s'inscrire à Polytechnique.org ?
+ Et si nous proposions à {$full_name} de s'inscrire à Polytechnique.org ?
</h1>
<p>
proposition d'inscription.
</p>
<p>
- Si tu es d'accord, merci d'indiquer ci-dessous l'adresse email de {$prenom} {$nom} si tu la
+ Si tu es d'accord, merci d'indiquer ci-dessous l'adresse email de {$full_name} si tu la
connais. Nous nous permettons d'attirer ton attention sur le fait que nous avons besoin d'être
sûrs que cette adresse est bien la sienne, afin que la partie privée du site reste uniquement
accessible aux seuls polytechniciens. Merci donc de ne nous donner ce renseignement uniquement si
</p>
<p>
Nous pouvons au choix lui écrire au nom de l'équipe Polytechnique.org, ou bien, si tu le veux
- bien, en ton nom. A toi de choisir la solution qui te paraît la plus adaptée !! Une fois {$prenom}
- {$nom} inscrit, nous t'enverrons un email pour te prévenir que son inscription a réussi.
+ bien, en ton nom. A toi de choisir la solution qui te paraît la plus adaptée !! Une fois
+ {$full_name} inscrit, nous t'enverrons un email pour te prévenir que son inscription a réussi.
</p>
<form method="post" action="{$platal->path}">
{xsrf_token_field}
<table class="bicol" summary="Fiche camarade">
- <tr class="impair"><td>Nom :</td><td>{$nom}</td></tr>
- <tr class="pair"><td>Prénom :</td><td>{$prenom}</td></tr>
+ <tr class="impair"><td>Nom :</td><td>{$full_name}</td></tr>
<tr class="impair"><td>Promo :</td><td>{$promo}</td></tr>
<tr class="pair">
<td>Adresse email :</td>
</h1>
<p>
-Photo actuelle de {$forlife}
+Photo actuelle de {$user->login()}
</p>
-<img src="photo/{$forlife}" alt="[ PHOTO ]" />
+<img src="photo/{$user->login()}" alt="[ PHOTO ]" />
<br />
<p>
-<a href="admin/trombino/{$uid}/delete?token={xsrf_token}">Supprimer cette photo</a>
+<a href="admin/trombino/{$user->login()}/delete?token={xsrf_token}">Supprimer cette photo</a>
</p>
<p>
-<a href="admin/trombino/{$uid}/original">Voir sa photo de trombi récupérée à l'école (si disponible)</a>
+<a href="admin/trombino/{$user->login()}/original">Voir sa photo de trombi récupérée à l'école (si disponible)</a>
</p>
-<form action="admin/trombino/{$uid}/new" method="post" enctype="multipart/form-data">
+<form action="admin/trombino/{$user->login()}/new" method="post" enctype="multipart/form-data">
{xsrf_token_field}
<div>
<input name="userfile" type="file" size="20" maxlength="150" />
<div id="fiche">
<div id="photo" class="part">
- {if $photo_url}<img alt="Photo de {$x.forlife}" src="{$photo_url}" width="{$x.x}"/>{/if}
+ {if $photo_url}<img alt="Photo de {$user->login()}" src="{$photo_url}" width="{$x.x}"/>{/if}
{if $logged && ( $x.section|smarty:nodefaults || $x.binets_join|smarty:nodefaults || $x.gpxs_join|smarty:nodefaults)}
<h2>À l'X...</h2>
{if $x.section}<div><em class="intitule">Section : </em><span>{$x.section}</span></div>{/if}
</div>
<div id="fiche_identite" class="part">
<div class="civilite">
- {if $x.sexe}•{/if}
- {$x.prenom} {if $x.nom_usage eq ""}{$x.nom}{else}{$x.nom_usage} ({$x.nom}){/if}
+ {if $user->isFemale()}•{/if}
+ {$user->fullName()}{if $x.nom_usage neq ""} ({$x.nom}){/if}
{if $logged}
{if $x.nickname} (alias {$x.nickname}){/if}
{/if}
{if $x.web} <a href="{$x.web}">{icon name="world_go" title="Site Web"}</a>{/if}
{if $logged}
- {if !$x.dcd}<a href="vcard/{$x.forlife}.vcf">{*
+ {if !$x.dcd}<a href="vcard/{$user->login()}.vcf">{*
*}{icon name=vcard title="Afficher la carte de visite"}</a>{/if}
{if !$x.is_contact}
- <a href="javascript:chgMainWinLoc('carnet/contacts?action=ajouter&user={$x.forlife}&token={xsrf_token}')">
+ <a href="javascript:chgMainWinLoc('carnet/contacts?action=ajouter&user={$user->login()}&token={xsrf_token}')">
{icon name=add title="Ajouter à mes contacts"}</a>
{else}
- <a href="javascript:chgMainWinLoc('carnet/contacts?action=retirer&user={$x.forlife}&token={xsrf_token}')">
+ <a href="javascript:chgMainWinLoc('carnet/contacts?action=retirer&user={$user->login()}&token={xsrf_token}')">
{icon name=cross title="Retirer de mes contacts"}</a>
{/if}
{if hasPerm('admin')}
- <a href="javascript:chgMainWinLoc('admin/user/{$x.forlife}')">
+ <a href="javascript:chgMainWinLoc('admin/user/{$user->login()}')">
{icon name=wrench title="administrer user"}</a>
{/if}
- {if $x.forlife eq $smarty.session.forlife}
+ {if $user->login() eq $smarty.session.hruid}
<a href="javascript:chgMainWinLoc('profile/edit')">{icon name="user_edit" title="Modifier ma fiche"}</a>
{/if}
{/if}
{if $logged}
<div class='email'>
{if $x.dcd}
- Décédé{if $x.sexe}e{/if} le {$x.deces|date_format}
+ Décédé{if $user->isFemale()}e{/if} le {$x.deces|date_format}
{elseif !$x.actif}
Ce{if $c.sexe}tte{/if} camarade n'a plus d'adresse de redirection valide,<br />
- <a href="marketing/broken/{$x.forlife}" class="popup">clique ici si tu connais son adresse email !</a>
+ <a href="marketing/broken/{$user->login()}" class="popup">clique ici si tu connais son adresse email !</a>
{elseif !$x.inscrit}
Cette personne n'est pas inscrite à Polytechnique.org,<br />
- <a href="marketing/public/{$x.user_id}" class="popup">clique ici si tu connais son adresse email !</a>
+ <a href="marketing/public/{$user->login()}" class="popup">clique ici si tu connais son adresse email !</a>
{else}
{if $virtualalias}
<a href="mailto:{$virtualalias}">{$virtualalias}</a><br />
{/if}
- <a href="mailto:{$x.bestalias}@{#globals.mail.domain#}">{$x.bestalias}@{#globals.mail.domain#}</a>
- {if $x.bestalias neq $x.forlife}<br />
- <a href="mailto:{$x.forlife}@{#globals.mail.domain#}">{$x.forlife}@{#globals.mail.domain#}</a>
+ <a href="mailto:{$user->bestEmail()}">{$user->bestEmail()}</a>
+ {if $user->bestEmail() neq $user->forlifeEmail()}<br />
+ <a href="mailto:{$user->forlifeEmail()}">{$user->forlifeEmail()}</a>
{/if}
{/if}
</div>
{if $x.iso3166}
<img src='images/flags/{$x.iso3166}.gif' alt='{$x.nationalite}' height='11' title='{$x.nationalite}' />
{/if}
- X {$x.promo}
- {if ($x.promo_sortie-3 > $x.promo)}
+ X {$user->promo()}
+ {if $x.promo_sortie && ($x.promo_sortie-3 > $x.promo)}
- X {math equation="a-b" a=$x.promo_sortie b=3}
{/if}
{if $x.applis_join}
- Formation : {$x.applis_join|smarty:nodefaults}
{/if}
{if $logged && $x.is_referent}
- [<a href="referent/{$x.forlife}" class='popup2'>Ma fiche référent</a>]
+ [<a href="referent/{$user->login()}" class='popup2'>Ma fiche référent</a>]
{/if}
</div>
</div>
<div class="part">
<small>
Cette fiche est publique et visible par tout internaute,<br />
- vous pouvez aussi voir <a href="profile/private/{$x.forlife}?display=light">celle réservée aux X</a>.
+ vous pouvez aussi voir <a href="profile/private/{$user->login()}?display=light">celle réservée aux X</a>.
</small>
</div>
{elseif $view eq 'ax'}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
<table id="suid" cellpadding="0" cellspacing="0">
<tr>
<td>
- {$smarty.session.suid} ({$smarty.session.forlife})
+ {$smarty.session.suid} ({$smarty.session.hruid})
[<a href="exit">exit</a>]
</td>
</tr>
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
<table id="suid" cellpadding="0" cellspacing="0">
<tr>
<td>
- {$smarty.session.suid} ({$smarty.session.forlife})
+ {$smarty.session.suid} ({$smarty.session.hruid})
[<a href="exit">exit</a>]
</td>
</tr>
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
{if $smarty.session.suid}
<div id="suid">
<a href="exit">
- Quitter le SU sur {$smarty.session.forlife} ({$smarty.session.perms->flags()})
+ Quitter le SU sur {$smarty.session.hruid} ({$smarty.session.perms->flags()})
</a>
</div>
{/if}
<tr>
<th>
{if $smarty.session.core_rss_hash}
- <a href='{$platal->ns}rss/{$smarty.session.forlife}/{$smarty.session.core_rss_hash}/rss.xml' style="display:block;float:right">
+ <a href='{$platal->ns}rss/{$smarty.session.hruid}/{$smarty.session.core_rss_hash}/rss.xml' style="display:block;float:right">
{icon name=feed title='fil rss'}
</a>
{else}
<div style="float: right">
<small>
Annonce proposée par
- <a class="popup2" href="https://www.polytechnique.org/profile/{$art.forlife}">
+ <a class="popup2" href="https://www.polytechnique.org/profile/{$art.hruid}">
{$art.prenom} {$art.nom} (X{$art.promo})
</a>
</small>
<h1>Demande d'inscription à {$asso.nom}</h1>
-{if $u && $is_admin && $show_form}
+{if $user && $is_admin && $show_form}
<h2>
- Demande de la part de : <a href="profile/{$u}" class="popup2">{$prenom} {$nom} (X{$promo})</a>
+ Demande de la part de : <a href="profile/{$user->login()}" class="popup2">{$user->fullName()} (X{$user->promo()})</a>
</h2>
{if $reason}
</fieldset>
{/if}
-<form action="{$platal->ns}subscribe/{$u}" method="post">
+<form action="{$platal->ns}subscribe/{$user->login()}" method="post">
{xsrf_token_field}
<table class="bicol">
<tr>
--
Ma fiche sur Polytechnique.org :
-https://www.polytechnique.org/profile/{$smarty.session.forlife}
+https://www.polytechnique.org/profile/{$smarty.session.hruid}
</textarea>
<div class="center">
<input type="submit" name="inscrire" value="M'inscrire !" />
</tr>
{iterate from=$valid item=user}
<tr>
- <td><input type="checkbox" name="subs[{$user.forlife}]" value="1" class="select_sub" /></td>
- <td><a href="profile/{$user.forlife}" class="popup2">{$user.prenom} {$user.nom} (X{$user.promo})</a></td>
+ <td><input type="checkbox" name="subs[{$user.hruid}]" value="1" class="select_sub" /></td>
+ <td><a href="profile/{$user.hruid}" class="popup2">{$user.prenom} {$user.nom} (X{$user.promo})</a></td>
<td>{$user.date|date_format}</td>
- <td><a href="{$platal->ns}subscribe/{$user.forlife}">{icon name=magnifier title="Détails"}</a></td>
+ <td><a href="{$platal->ns}subscribe/{$user.hruid}">{icon name=magnifier title="Détails"}</a></td>
</tr>
{/iterate}
</table>
--- /dev/null
+# Creates a new column for the hruid field, and adds an index on it.
+ALTER TABLE auth_user_md5
+ ADD COLUMN hruid VARCHAR(255) DEFAULT NULL AFTER user_id,
+ ADD UNIQUE INDEX hruid(hruid);
+
+
+# Pre-fills the hruid field with the current forlife.
+ UPDATE auth_user_md5 AS u
+LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
+ SET u.hruid = a.alias
+ WHERE a.alias IS NOT NULL AND u.hruid IS NULL;
+
+# vim:set syntax=mysql:
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
-function smarty_function_make_forlife($params, &$smarty)
-{
- return make_forlife($params['prenom'], $params['nom'], $params['promo']);
-}
+ini_set('include_path', dirname(__FILE__).'/../../include:' . dirname(__FILE__).'/../../classes:/usr/share/php');
-/* vim: set expandtab enc=utf-8: */
+require_once 'xorg.inc.php';
+require_once 'xdb.php';
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
?>
--- /dev/null
+#!/usr/bin/php5
+<?php
+
+require_once 'connect.db.inc.php';
+require_once 'xorg.misc.inc.php';
+
+// Fetches the list of unregistered users.
+$users = XDB::iterRow(
+ "SELECT user_id, prenom, nom, promo
+ FROM auth_user_md5
+ WHERE hruid IS NULL");
+
+// Creates missing human readable uids.
+while (list($user_id, $prenom, $nom, $promo) = $users->next()) {
+ $forlife = make_forlife($prenom, $nom, $promo);
+ if (!XDB::execute("UPDATE auth_user_md5 SET hruid = {?} WHERE user_id = {?}", $forlife, $user_id)) {
+ echo "WARNING: Duplicate forlife for user $user_id and forlife '$forlife'. Please check manually the entry.\n";
+ }
+}
+?>
--- /dev/null
+#!/bin/bash
+
+. ../inc/pervasive.sh
+
+mailman_stop
+mailman_templates
+mailman_start
+
+
+###########################################################
+for sql in *.sql
+do
+ echo -n $sql
+ $MYSQL x4dat < $sql &>/dev/null || echo -n " ERROR"
+ echo .
+done
+
+###########################################################
+echo "Creating forlife ids for unregistered user (takes a while)."
+
+./hruid.update.php
+
+###########################################################
+