'%grp/edit' => $this->make_hook('edit', AUTH_MDP, 'groupadmin'),
'%grp/mail' => $this->make_hook('mail', AUTH_MDP, 'groupadmin'),
'%grp/forum' => $this->make_hook('forum', AUTH_MDP, 'groupmember'),
+ '%grp/former_users' => $this->make_hook('former_users', AUTH_MDP, 'admin'),
'%grp/annuaire' => $this->make_hook('annuaire', AUTH_MDP, 'groupannu'),
'%grp/annuaire/vcard' => $this->make_hook('vcard', AUTH_MDP, 'groupmember:groupannu'),
'%grp/annuaire/csv' => $this->make_hook('csv', AUTH_MDP, 'groupmember:groupannu'),
+ '%grp/directory/sync' => $this->make_hook('directory_sync', AUTH_MDP, 'groupadmin'),
+ '%grp/directory/unact' => $this->make_hook('non_active', AUTH_MDP, 'groupadmin'),
'%grp/trombi' => $this->make_hook('trombi', AUTH_MDP, 'groupannu'),
'%grp/geoloc' => $this->make_hook('geoloc', AUTH_MDP, 'groupannu'),
'%grp/subscribe' => $this->make_hook('subscribe', AUTH_MDP),
{
global $globals;
- if ($action == 'trombi') {
- __autoload('userset');
- if ($action == 'trombi') {
- $view = new ProfileSet(new UFC_Group($globals->asso('id')));
- } else {
- $view = new UserSet(new UFC_Group($globals->asso('id')));
- }
- $view->addMod('trombi', 'Trombinoscope');
- $view->apply('annuaire', $page, $action, $subaction);
- $page->changeTpl('xnetgrp/annuaire.tpl');
- $count = XDB::fetchOneCell('SELECT COUNT(*)
- FROM group_members
- WHERE asso_id = {?}',
- $globals->asso('id'));
- $page->assign('nb_tot', $count);
- return;
+ __autoload('userset');
+ $admins = false;
+ if ($action == 'admins') {
+ $admins = true;
+ $action = $subaction;
}
-
+ $view = new UserSet(new UFC_Group($globals->asso('id'), $admins));
+ $view->addMod('groupmember', 'Annuaire');
+ $view->addMod('trombi', 'Trombinoscope');
+ $view->apply('annuaire', $page, $action);
+ $page->assign('only_admin', $admins);
$page->changeTpl('xnetgrp/annuaire.tpl');
- $sort = Env::s('order', 'directory_name');
- $ofs = Env::i('offset');
- if ($ofs < 0) {
- $ofs = 0;
- }
-
- $sdesc = $sort{0} == '-';
- $sf = $sdesc ? substr($sort, 1) : $sort;
- if ($sf == 'promo') {
- $se = new UFO_Promo(null, $sdesc);
- } else {
- $se = new UFO_Name($sf, null, null, $sdesc);
- }
+ }
- if (Env::b('admin')) {
- $uf = $globals->asso()->getAdminsFilter(null, $se);
- } else {
- $uf = $globals->asso()->getMembersFilter(null, $se);
- }
- $users = $uf->getUsers(new PlLimit(NB_PER_PAGE, $ofs * NB_PER_PAGE));
- $count = $uf->getTotalCount();
+ function handler_former_users($page)
+ {
+ global $globals;
+ require_once 'userset.inc.php';
- $page->assign('nb_tot', $count);
- $page->assign('pages', floor(($count + NB_PER_PAGE - 1) / NB_PER_PAGE));
- $page->assign('current', $ofs);
- $page->assign('order', $sort);
- $page->assign('users', $users);
- $page->assign('only_admin', Env::b('admin'));
+ $view = new UserSet(new UFC_GroupFormerMember($globals->asso('id')));
+ $view->addMod('groupmember', 'Anciens membres', true, array('noadmin' => true));
+ $view->apply('former_users', $page);
+ $page->changeTpl('xnetgrp/former_users.tpl');
}
function handler_trombi($page)
$page->assign('users', $users);
}
+ function handler_directory_sync($page)
+ {
+ global $globals;
+ require_once 'emails.inc.php';
+
+ $page->changeTpl('xnetgrp/sync.tpl');
+ Platal::load('lists', 'lists.inc.php');
+
+ if (Env::has('add_users')) {
+ S::assert_xsrf_token();
+
+ $users = array_keys(Env::v('add_users'));
+ $data = array();
+ foreach ($users as $uid) {
+ $data[] = XDB::format('({?}, {?})', $globals->asso('id'), $uid);
+ }
+ XDB::rawExecute('INSERT INTO group_members (asso_id, uid)
+ VALUES ' . implode(',', $data));
+ }
+
+ if (Env::has('add_nonusers')) {
+ S::assert_xsrf_token();
+
+ $nonusers = array_keys(Env::v('add_nonusers'));
+ foreach ($nonusers as $email) {
+ if ($user = User::getSilent($email) || !isvalid_email($email)) {
+ continue;
+ }
+
+ list($local_part, $domain) = explode('@', strtolower($email));
+ $hruid = User::makeHrid($local_part, $domain, 'ext');
+ if ($user = User::getSilent($hruid)) {
+ continue;
+ }
+
+ $parts = explode('.', $local_part);
+ if (count($parts) == 1) {
+ $lastname = $display_name = $full_name = $directory_name = ucfirst($local_part);
+ $firstname = '';
+ } else {
+ $firstname = ucfirst($parts[0]);
+ $lastname = ucwords(implode(' ', array_slice($parts, 1)));
+ $display_name = $firstname;
+ $full_name = $firstname . ' ' . $lastname;
+ $directory_name = strtoupper($lastname) . ' ' . $firstname;
+ }
+ XDB::execute('INSERT INTO accounts (hruid, display_name, full_name, directory_name, firstname, lastname, email, type, state)
+ VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, \'xnet\', \'disabled\')',
+ $hruid, $display_name, $full_name, $directory_name, $firstname, $lastname, $email);
+ $uid = XDB::insertId();
+ XDB::execute('INSERT INTO group_members (asso_id, uid)
+ VALUES ({?}, {?})',
+ $globals->asso('id'), $uid);
+ }
+ }
+
+ if (Env::has('add_users') || Env::has('add_nonusers')) {
+ $page->trigSuccess('Ajouts réalisés avec succès.');
+ }
+
+ $user = S::user();
+ $client = new MMList($user, $globals->asso('mail_domain'));
+ $lists = $client->get_lists();
+ $members = array();
+ foreach ($lists as $list) {
+ $details = $client->get_members($list['list']);
+ $members = array_merge($members, list_extract_members($details[1]));
+ }
+ $members = array_unique($members);
+ $uids = array();
+ $users = array();
+ $nonusers = array();
+ foreach ($members as $email) {
+ if ($user = User::getSilent($email)) {
+ $uids[] = $user->id();
+ } else {
+ $nonusers[] = $email;
+ }
+ }
+
+ $aliases = iterate_list_alias($globals->asso('mail_domain'));
+ foreach ($aliases as $alias) {
+ list($local_part, $domain) = explode('@', $alias);
+ $aliases_members = list_alias_members($local_part, $domain);
+ $users = array_merge($users, $aliases_members['users']);
+ $nonusers = array_merge($nonusers, $aliases_members['nonusers']);
+ }
+ foreach ($users as $user) {
+ $uids[] = $user->id();
+ }
+ $nonusers = array_unique($nonusers);
+ $uids = array_unique($uids);
+ if (count($uids)) {
+ $uids = XDB::fetchColumn('SELECT a.uid
+ FROM accounts AS a
+ WHERE a.uid IN {?} AND NOT EXISTS (SELECT *
+ FROM group_members AS g
+ WHERE a.uid = g.uid AND g.asso_id = {?})',
+ $uids, $globals->asso('id'));
+
+ $users = User::getBulkUsersWithUIDs($uids);
+ usort($users, 'User::compareDirectoryName');
+ } else {
+ $users = array();
+ }
+ sort($nonusers);
+
+ $page->assign('users', $users);
+ $page->assign('nonusers', $nonusers);
+ }
+
+ function handler_non_active($page)
+ {
+ global $globals;
+ $page->changeTpl('xnetgrp/non_active.tpl');
+
+ $uids = XDB::fetchColumn('SELECT g.uid
+ FROM group_members AS g
+ INNER JOIN accounts AS a ON (a.uid = g.uid)
+ LEFT JOIN register_pending_xnet AS p ON (p.uid = g.uid)
+ WHERE a.uid = g.uid AND g.asso_id = {?} AND a.type = \'xnet\' AND a.state = \'disabled\' AND p.uid IS NULL',
+ $globals->asso('id'));
+ foreach ($uids as $key => $uid) {
+ if (AccountReq::isPending($uid) || BulkAccountsReq::isPending($uid)) {
+ unset($uids[$key]);
+ }
+ }
+
+ if (Post::has('enable_accounts')) {
+ S::assert_xsrf_token();
+
+ $uids_to_enable = array_intersect(array_keys(Post::v('enable_accounts')), $uids);
+
+ $user = S::user();
+ $group = Platal::globals()->asso('nom');
+ $request = new BulkAccountsReq($user, $uids_to_enable, $group);
+ $request->submit();
+ $page->trigSuccess('Un email va bientôt être envoyé aux personnes sélectionnées pour l\'activation de leur compte.');
+
+ foreach ($uids as $key => $uid) {
+ if (in_array($uid, $uids_to_enable)) {
+ unset($uids[$key]);
+ }
+ }
+ }
+
+ $users = User::getBulkUsersWithUIDs($uids);
+ $page->assign('users', $users);
+ }
+
private function removeSubscriptionRequest($uid)
{
global $globals;
{
global $globals;
$this->removeSubscriptionRequest($user->id());
- XDB::execute("INSERT IGNORE INTO group_members (asso_id, uid)
- VALUES ({?}, {?})",
- $globals->asso('id'), $user->id());
+ Group::subscribe($globals->asso('id'), $user->id());
+
if (XDB::affectedRows() == 1) {
$mailer = new PlMailer();
$mailer->addTo($user->forlifeEmail());
// Finds or creates account: first cases are for users with an account.
if (!User::isForeignEmailAddress($email)) {
// Standard account
- $user = User::get($email);
+ $user = User::getSilent($email);
} else if (!isvalid_email($email)) {
// email might not be a regular email but an alias or a hruid
- $user = User::get($email);
+ $user = User::getSilent($email);
if (!$user) {
// need a valid email address
$page->trigError('« <strong>' . $email . '</strong> » n\'est pas une adresse email valide.');
return;
}
} else if (Env::v('x') && Env::i('userid')) {
- $user = User::getWithUID(Env::i('userid'));
+ $user = User::getSilentWithUID(Env::i('userid'));
if (!$user) {
$page->trigError('Utilisateur invalide.');
return;
list($mbox, $domain) = explode('@', strtolower($email));
$hruid = User::makeHrid($mbox, $domain, 'ext');
// User might already have an account (in another group for example).
- $user = User::get($hruid);
+ $user = User::getSilent($hruid);
// If the user has no account yet, creates new account: build names from email address.
if (empty($user)) {
$directory_name = strtoupper($lastname) . " " . $firstname;
}
XDB::execute('INSERT INTO accounts (hruid, display_name, full_name, directory_name, firstname, lastname, email, type, state)
- VALUES ({?}, {?}, {?}, {?}, {?}, \'xnet\', \'disabled\')',
+ VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, \'xnet\', \'disabled\')',
$hruid, $display_name, $full_name, $directory_name, $firstname, $lastname, $email);
- $user = User::get($hruid);
+ $user = User::getSilent($hruid);
}
$suggest_account_activation = $this->suggest($user);
FROM register_pending_xnet
WHERE uid = {?}',
$user->id());
- $requested = AccountReq::isPending($user->id());
+ $requested = AccountReq::isPending($user->id()) || BulkAccountsReq::isPending($user->id());
if ($active || $pending || $requested) {
return false;
function unsubscribe(PlUser $user)
{
global $globals;
- XDB::execute("DELETE FROM group_members
- WHERE uid = {?} AND asso_id = {?}",
- $user->id(), $globals->asso('id'));
+ Group::unsubscribe($globals->asso('id'), $user->id());
if ($globals->asso('notif_unsub')) {
$mailer = new PlMailer('xnetgrp/unsubscription-notif.mail.tpl');
$page->trigSuccess("{$user->fullName()} a été désabonné de $ml.");
}
}
+
+ if ($globals->asso('has_nl')) {
+ // Updates group's newsletter subscription.
+ if (Post::i('newsletter') == 1) {
+ XDB::execute('INSERT IGNORE INTO newsletter_ins (uid, nlid)
+ SELECT {?}, id
+ FROM newsletters
+ WHERE group_id = {?}',
+ $user->id(), $globals->asso('id'));
+ } else {
+ XDB::execute('DELETE ni
+ FROM newsletter_ins AS ni
+ INNER JOIN newsletters AS n ON (n.id = ni.nlid)
+ WHERE ni.uid = {?} AND n.group_id = {?}',
+ $user->id(), $globals->asso('id'));
+ }
+ }
}
$res = XDB::rawFetchAllAssoc('SHOW COLUMNS FROM group_members LIKE \'position\'');
$positions = str_replace(array('enum(', ')', '\''), '', $res[0]['Type']);
+ $nl_registered = XDB::fetchOneCell('SELECT COUNT(ni.uid)
+ FROM newsletter_ins AS ni
+ INNER JOIN newsletters AS n ON (n.id = ni.nlid)
+ WHERE ni.uid = {?} AND n.group_id = {?}',
+ $user->id(), $globals->asso('id'));
$page->assign('user', $user);
$page->assign('suggest', $this->suggest($user));
$page->assign('listes', $mmlist->get_lists($user->forlifeEmail()));
$page->assign('alias', $user->emailGroupAliases($globals->asso('mail_domain')));
$page->assign('positions', explode(',', $positions));
+ $page->assign('nl_registered', $nl_registered);
}
function handler_rss(PlPage $page, PlUser $user)
$page->trigError('Le fichier n\'est pas une image valide au format JPEG, GIF ou PNG.');
$upload->rm();
return false;
- } elseif (!$upload->resizeImage(200, 300, 100, 100, 32284)) {
+ } elseif (!$upload->resizeImage(80, 100, 100, 100, 32284)) {
$page->trigError('Impossible de retraiter l\'image');
return false;
}