X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fgoogleapps.inc.php;h=7449a3a02beef3a0f20630391d54a98ee36a7fa9;hb=9e1816c7666767755abbc24f6a0df290efff81b6;hp=54e3efe55cef568c442dfd3d03b97aed6f733802;hpb=53ee429b076f679168fda0301651a21b00ddf0e3;p=platal.git diff --git a/include/googleapps.inc.php b/include/googleapps.inc.php index 54e3efe..7449a3a 100644 --- a/include/googleapps.inc.php +++ b/include/googleapps.inc.php @@ -1,6 +1,6 @@ activate_mail_redirection) { require_once('emails.inc.php'); - $storage = new EmailStorage($userid, 'googleapps'); + $storage = new EmailStorage($user, 'googleapps'); $storage->activate(); } @@ -44,14 +43,12 @@ function post_queue_u_create($job) { $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); @@ -66,19 +63,18 @@ function post_queue_u_update($job) { // 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(); } @@ -86,14 +82,12 @@ function post_queue_u_update($job) { $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(); @@ -107,8 +101,8 @@ function post_queue_u_update($job) { // TODO(vincent.zanotti): add the url of gappsd, when available. class GoogleAppsAccount { - // User identification: user id, and forlife. - private $uid; + // User identification: user id, and hruid. + private $user; public $g_account_name; // Local account parameters. @@ -125,6 +119,9 @@ class GoogleAppsAccount public $r_last_webmail; public $reporting_date; + // Nicknames (aliases) registered for that user, lazily loaded. + public $nicknames; + // Pending requests in the gappsd job queue (cf. top note). public $pending_create; public $pending_delete; @@ -139,15 +136,16 @@ class GoogleAppsAccount // 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; $res = XDB::query( @@ -157,8 +155,7 @@ class GoogleAppsAccount 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']; @@ -192,8 +189,7 @@ class GoogleAppsAccount 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']; @@ -211,7 +207,7 @@ class GoogleAppsAccount { 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 @@ -224,8 +220,7 @@ class GoogleAppsAccount 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); @@ -244,7 +239,7 @@ class GoogleAppsAccount // Creates a queue job of the @p type, for the user represented by this // GoogleAppsAccount object, using @p parameters. @p parameters is supposed // to be a one-dimension array of key-value mappings. - // The created job as a 'normal' priority, and is scheduled for immediate + // The created job as a 'immediate' priority, and is scheduled for immediate // execution. private function create_queue_job($type, $parameters) { $parameters["username"] = $this->g_account_name; @@ -252,10 +247,10 @@ class GoogleAppsAccount "INSERT INTO gapps_queue SET q_owner_id = {?}, q_recipient_id = {?}, p_entry_date = NOW(), p_notbefore_date = NOW(), - p_priority = 'normal', + p_priority = 'immediate', j_type = {?}, j_parameters = {?}", S::v('uid'), - $this->uid, + $this->user->id(), $type, json_encode($parameters)); } @@ -280,6 +275,21 @@ class GoogleAppsAccount return $this->g_status == 'disabled'; } + // Loads and returns the list of nicknames for the user. + public function nicknames() + { + if ($this->nicknames == null) { + $res = XDB::query( + "SELECT g_nickname + FROM gapps_nicknames + WHERE g_account_name = {?} + ORDER BY g_nickname", + $this->g_account_name); + $this->nicknames = $res->fetchColumn(); + } + return $this->nicknames; + } + // Changes the GoogleApps password. public function set_password($password) { @@ -344,7 +354,7 @@ class GoogleAppsAccount 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; } @@ -362,8 +372,7 @@ class GoogleAppsAccount $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; @@ -391,8 +400,7 @@ class GoogleAppsAccount $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. @@ -405,7 +413,7 @@ class GoogleAppsAccount g_first_name = {?}, g_last_name = {?}, g_status = 'unprovisioned'", - $this->uid, + $this->user->id(), $password_sync, $redirect_mails, $this->g_account_name, @@ -423,7 +431,7 @@ class GoogleAppsAccount )); // Updates the GoogleAppsAccount status. - $this->__construct($this->uid, $this->g_account_name); + $this->__construct($this->user); } } @@ -444,7 +452,7 @@ class GoogleAppsAccount "SELECT g_admin FROM gapps_accounts WHERE l_userid = {?} AND g_status = 'active'", $uid); - return ($res->numRows() > 0 ? (bool)$res->fetchOneRow() : false); + return ($res->numRows() > 0 ? (bool)$res->fetchOneCell() : false); } }