$uids = array_map(array('XDB', 'escape'), $uids);
return XDB::iterator('SELECT a.uid, a.hruid, a.registration_date, ah.alias AS homonym,
- CONCAT(af.alias, \'@' . $globals->mail->domain . '\') AS forlife,
+ IF (af.alias IS NULL, a.email, CONCAT(af.alias, \'@' . $globals->mail->domain . '\')) AS forlife,
CONCAT(af.alias, \'@' . $globals->mail->domain2 . '\') AS forlife_alternate,
- CONCAT(ab.alias, \'@' . $globals->mail->domain . '\') AS bestalias,
+ IF (ab.alias IS NULL, a.email, CONCAT(ab.alias, \'@' . $globals->mail->domain . '\')) AS bestalias,
CONCAT(ab.alias, \'@' . $globals->mail->domain2 . '\') AS bestalias_alternate,
a.full_name, a.display_name, a.sex = \'female\' AS gender,
IF(a.state = \'active\', at.perms, \'\') AS perms,
return $this->watch_last;
}
+ public function invalidWatchCache()
+ {
+ unset($this->watch_actions);
+ unset($this->watch_users);
+ unset($this->watch_last);
+ unset($this->watch_promos);
+ }
+
// Contacts
private $contacts = null;
return isset($this->contacts[$profile->id()]);
}
+ public function isWatchedUser(Profile &$profile)
+ {
+ return in_array($profile->id(), $this->watchUsers());
+ }
+
// Groupes X
private $groups = null;
public function groups()
return $this->groups;
}
+ public function groupNames($institutions = false)
+ {
+ if ($institutions) {
+ $where = ' AND (g.cat = \'GroupesX\' OR g.cat = \'Institutions\')';
+ } else {
+ $where = '';
+ }
+ return XDB::fetchAllAssoc('SELECT g.diminutif, g.nom, g.site
+ FROM group_members AS gm
+ LEFT JOIN groups AS g ON (g.id = gm.asso_id)
+ WHERE gm.uid = {?}' . $where,
+ $this->id());
+ }
+
/**
* Clears a user.
* *always deletes in: account_lost_passwords, register_marketing,
$this->id());
if ($clearAll) {
+ $groupIds = XDB::iterator('SELECT asso_id
+ FROM group_members
+ WHERE uid = {?}',
+ $this->id());
+ while ($groupId = $groupIds->next()) {
+ $group = Group::get($groupId);
+ if ($group->notif_unsub) {
+ $mailer = new PlMailer('xnetgrp/unsubscription-notif.mail.tpl');
+ $admins = $group->iterAdmins();
+ while ($admin = $admins->next()) {
+ $mailer->addTo($admin);
+ }
+ $mailer->assign('group', $group->shortname);
+ $mailer->assign('user', $this);
+ $mailer->assign('selfdone', false);
+ $mailer->send();
+ }
+ }
+
XDB::execute('DELETE FROM account_auth_openid, announce_read, contacts,
email_options, email_send_save, emails,
forum_innd, forum_profiles, forum_subs,
gapps_accounts, gapps_nicknames, group_announces_read,
- group_member_sub_requests, reminder, requests,
+ group_members, group_member_sub_requests, reminder, requests,
requests_hidden
WHERE uid = {?}',
$this->id());
|| $dom == $globals->mail->alias_dom2;
}
+ /* Tries to find pending accounts with an hruid close to $login. */
+ public static function getPendingAccounts($login, $iterator = false)
+ {
+ global $globals;
+
+ if (strpos($login, '@') === false) {
+ return null;
+ }
+
+ list($login, $domain) = explode('@', $login);
+
+ if ($domain && $domain != $globals->mail->domain && $domain != $globals->mail->domain2) {
+ return null;
+ }
+
+ $sql = "SELECT uid, full_name
+ FROM accounts
+ WHERE state = 'pending' AND REPLACE(hruid, '-', '') LIKE
+ CONCAT('%', REPLACE(REPLACE(REPLACE({?}, ' ', ''), '-', ''), '\'', ''), '%')
+ ORDER BY full_name";
+ if ($iterator) {
+ return XDB::iterator($sql, $login);
+ } else {
+ $res = XDB::query($sql, $login);
+ return $res->fetchAllAssoc();
+ }
+ }
+
+
public static function iterOverUIDs($uids, $respect_order = true)
{
return new UserIterator(self::loadMainFieldsFromUIDs($uids, $respect_order));