From: Stéphane Jacob Date: Fri, 13 Nov 2009 22:36:17 +0000 (+0100) Subject: Merge commit 'origin/fusionax' into account X-Git-Tag: xorg/1.0.0~332^2~312 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=5660032ac785d410f90e3f5b0d6948dc90b0cfea;p=platal.git Merge commit 'origin/fusionax' into account --- 5660032ac785d410f90e3f5b0d6948dc90b0cfea diff --cc Makefile index 446aedd,3233b9f..e4b15e5 --- a/Makefile +++ b/Makefile @@@ -26,11 -26,8 +26,11 @@@ ende all: build - build: core conf banana wiki openid medals jquery + build: core conf static banana wiki openid medals jquery +check: + @!(find . -name '*.php' -exec php -l {} ";" | grep -v 'No syntax errors detected') + q: @echo -e "Code statistics\n" @sloccount $(filter-out wiki/ spool/, $(wildcard */)) 2> /dev/null | egrep '^[a-z]*:' diff --cc classes/platallogger.php index 447ff9e,9e9e535..9ff2e61 --- a/classes/platallogger.php +++ b/classes/platallogger.php @@@ -71,8 -74,8 +71,8 @@@ class PlatalLogger extends PlLogge $proxy = 'proxy'; } - XDB::execute("INSERT INTO logger.sessions - XDB::execute("INSERT INTO #logger#.sessions - SET uid={?}, host={?}, ip={?}, forward_ip={?}, forward_host={?}, browser={?}, suid={?}, flags={?}", ++ XDB::execute("INSERT INTO #logger#.sessions + SET uid={?}, host={?}, ip={?}, forward_ip={?}, forward_host={?}, browser={?}, suid={?}, flags={?}", $uid, $host, ip_to_uint($ip), ip_to_uint($forward_ip), $forward_host, $browser, $suid, $proxy); if ($forward_ip) { $this->proxy_ip = $ip; @@@ -106,8 -109,8 +106,8 @@@ public function log($action, $data = null) { if (isset($this->actions[$action])) { - XDB::execute("INSERT INTO logger.events - XDB::execute("INSERT INTO #logger#.events - SET session={?}, action={?}, data={?}", ++ XDB::execute("INSERT INTO #logger#.events + SET session={?}, action={?}, data={?}", $this->session, $this->actions[$action], $data); } else { trigger_error("PlLogger: unknown action, $action", E_USER_WARNING); diff --cc classes/xnetpage.php index 9ccdf37,1cff3c8..7fdd2bb --- a/classes/xnetpage.php +++ b/classes/xnetpage.php @@@ -138,10 -141,11 +141,10 @@@ function list_all_my_groups($params if (!S::logged()) { return; } - $res = XDB::iterRow( - "SELECT a.nom, a.diminutif - FROM #groupex#.asso AS a - INNER JOIN #groupex#.membres AS m ON m.asso_id = a.id - WHERE m.uid={?}", S::v('uid')); + $res = XDB::iterRow('SELECT a.nom, a.diminutif - FROM groupex.asso AS a - INNER JOIN groupex.membres AS m ON m.asso_id = a.id ++ FROM #groupex#.asso AS a ++ INNER JOIN #groupex#.membres AS m ON m.asso_id = a.id + WHERE m.uid = {?}', S::i('uid')); $links = 'déconnexion'; $html = '
Mes groupes (' . $links . ') :
'; while (list($nom, $mini) = $res->next()) { diff --cc classes/xorgsession.php index 5c0a3dc,e46be2c..ab54814 --- a/classes/xorgsession.php +++ b/classes/xorgsession.php @@@ -191,24 -206,17 +191,24 @@@ class XorgSession extends PlSessio } // Retrieves main user properties. - $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, - 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, - UNIX_TIMESTAMP(s.start) AS lastlogin, s.host - FROM auth_user_md5 AS u - INNER JOIN auth_user_quick AS q USING(user_id) - LEFT JOIN gapps_accounts AS g ON (u.user_id = g.l_userid AND g.g_status = 'active') - LEFT JOIN #logger#.last_sessions AS ls ON (ls.uid = u.user_id) + /** TODO: Move needed informations to account tables */ + /** TODO: Currently suppressed data are matricule, promo */ + /** TODO: Use the User object to fetch all this */ + $res = XDB::query("SELECT a.uid, a.hruid, a.display_name, a.full_name, + a.sex = 'female' AS femme, a.email_format, + a.token, FIND_IN_SET('watch', a.flags) AS watch_account, + UNIX_TIMESTAMP(fp.last_seen) AS banana_last, UNIX_TIMESTAMP(w.last) AS watch_last, + a.last_version, g.g_account_name IS NOT NULL AS googleapps, + UNIX_TIMESTAMP(s.start) AS lastlogin, s.host, + a.is_admin, at.perms + FROM accounts AS a + INNER JOIN account_types AS at ON(a.type = at.type) + INNER JOIN watch AS w ON(w.uid = a.uid) + LEFT JOIN forum_profiles AS fp ON(fp.uid = a.uid) + LEFT JOIN gapps_accounts AS g ON(a.uid = g.l_userid AND g.g_status = 'active') - LEFT JOIN logger.last_sessions AS ls ON (ls.uid = a.uid) - LEFT JOIN logger.sessions AS s ON(s.id = ls.id) ++ LEFT JOIN #logger#.last_sessions AS ls ON (ls.uid = a.uid) + LEFT JOIN #logger#.sessions AS s ON(s.id = ls.id) - WHERE u.user_id = {?} AND u.perms IN('admin', 'user')", $uid); + WHERE a.uid = {?} AND a.state = 'active'", $user->id()); if ($res->numRows() != 1) { return false; } diff --cc htdocs/javascript/.gitignore index da77c0b,10a9591..cd8c90c --- a/htdocs/javascript/.gitignore +++ b/htdocs/javascript/.gitignore @@@ -1,4 -1,6 +1,7 @@@ + # Versioning links + /0.10.* + # jQuery and its plugins are downloaded by the Makefile /jquery.*js +/ui.*js !/jquery.autocomplete.js diff --cc include/banana/forum.inc.php index 393d39a,e3998c2..8baa6bb --- a/include/banana/forum.inc.php +++ b/include/banana/forum.inc.php @@@ -233,15 -214,33 +233,15 @@@ class ForumsBanana extends Banan } } - $req = XDB::query(" - SELECT nom, mail, sig, - FIND_IN_SET('threads', flags), - FIND_IN_SET('automaj', flags), - FIND_IN_SET('xface', flags), - tree_unread, - tree_read - FROM #forums#.profils - 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::user()->forlifeEmail(); - $sig = $nom.' ('.S::v('promo').')'; - $disp = 0; - $maj = 0; - $xface = 0; - $unread = 'o'; - $read = 'dg'; - } - $page->assign('nom' , $nom); - $page->assign('mail', $mail); - $page->assign('sig', $sig); - $page->assign('disp', $disp); - $page->assign('maj', $maj); - $page->assign('xface', $xface); - $page->assign('unread', $unread); - $page->assign('read', $read); + $infos = $this->fetchProfile(); - $page->assign('nom' , $infos['name']); - $page->assign('mail', $infos['mail']); - $page->assign('sig', $infos['sig']); - $page->assign('disp', $infos['threads']); - $page->assign('maj', $infos['maj']); - $page->assign('xface', $infos['xface']); ++ $page->assign('nom' , $infos['name']); ++ $page->assign('mail', $infos['mail']); ++ $page->assign('sig', $infos['sig']); ++ $page->assign('disp', $infos['threads']); ++ $page->assign('maj', $infos['maj']); ++ $page->assign('xface', $infos['xface']); + $page->assign('unread', $infos['tree_unread']); - $page->assign('read', $infos['tree_read']); ++ $page->assign('read', $infos['tree_read']); return null; } } diff --cc include/banana/hooks.inc.php index 9402337,703df77..82334ea --- a/include/banana/hooks.inc.php +++ b/include/banana/hooks.inc.php @@@ -189,13 -185,12 +189,13 @@@ function hook_getXFace($headers return false; } if (isset($headers['x-face'])) { - $res = XDB::query("SELECT p.uid - FROM #forums#.profils AS p - INNER JOIN #x4dat#.aliases AS a ON (p.uid = a.id) - WHERE FIND_IN_SET('xface', p.flags) AND a.alias = {?}", - $login); + $user = User::getSilent($login); - $res = XDB::query('SELECT pf.uid ++ $res = XDB::query("SELECT pf.uid + FROM forum_profiles AS pf - WHERE pf.uid = {?} AND FIND_IN_SET(\'xface\', pf.flags)', ++ WHERE pf.uid = {?} AND FIND_IN_SET('xface', pf.flags)", + $user->id()); if ($res->numRows()) { + // User wants his xface to be showed, fallback to default handler return false; } } diff --cc include/user.func.inc.php index 7e98747,2bc3ad6..82afc63 --- a/include/user.func.inc.php +++ b/include/user.func.inc.php @@@ -42,14 -41,16 +42,14 @@@ function user_clear_all_subs($user_id, 'user_id' => array('requests', 'user_changes')); if ($really_del) { - array_push($tables_to_clear['uid'], 'emails', 'groupex.membres', 'contacts', 'adresses', 'profile_phones', + array_push($tables_to_clear['uid'], 'emails', '#groupex#.membres', 'contacts', 'adresses', 'profile_phones', - 'photo', 'perte_pass', 'langues_ins', '#forums#.abos', 'forums.profils'); - array_push($tables_to_clear['user_id'], 'newsletter_ins', 'auth_user_quick', 'binets_ins'); + 'photo', 'perte_pass', 'langues_ins', 'forum_subs', 'forum_profiles'); + array_push($tables_to_clear['user_id'], 'newsletter_ins', 'binets_ins'); $tables_to_clear['id'] = array('aliases'); $tables_to_clear['contact'] = array('contacts'); - XDB::execute("UPDATE auth_user_md5 - SET date_ins = 0, promo_sortie = 0, nom_usage = '', password = '', perms = 'pending', - nationalite = '', nationalite2 = '', nationalite3 = '', cv = '', section = 0, - date = 0, smtppass = '', mail_storage = '' - WHERE user_id = {?}", $uid); + XDB::execute("UPDATE accounts + SET registration_date = 0, state = 'pending', password = NULL, weak_password = NULL, token = NULL, is_admin = 0 + WHERE uid = {?}", $uid); XDB::execute("DELETE virtual.* FROM virtual INNER JOIN virtual_redirect AS r USING(vid) WHERE redirect = {?}", $alias.'@'.$globals->mail->domain); XDB::execute("DELETE virtual.* FROM virtual INNER JOIN virtual_redirect AS r USING(vid) WHERE redirect = {?}", diff --cc modules/admin.php index 1d5f1f3,af06bef..6334aa1 --- a/modules/admin.php +++ b/modules/admin.php @@@ -405,201 -398,264 +405,200 @@@ class AdminModule extends PLModul } } - // 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); - - // Processes admin requests, if any. - foreach($_POST as $key => $val) { - S::assert_xsrf_token(); - - 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 "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"); - break; - } - - // 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 { - $page->trigError("Impossible d'ajouter l'alias '$alias@$domain', 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("Impossible d'ajouter l'alias '$alias', il est probablement déjà attribué"); - } - } else { - $page->trigError("Le domaine '$domain' n'est pas valide"); - } - 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; - - // 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; - } - - // 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(); - - // Also serve a reminder to the admin: disabling an account - // does not deactivate email forwarding. - $page->trigWarning("N'oubliez pas, le cas échéant, de désactiver les redirections et le compte GoogleApps de l'utilisateur."); - } - - // 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(); - - // Redacts the password in the notification, to avoid transmitting - // sensitive information by email. - $new_fields['password'] = ($old_fields['password'] != $new_fields['password'] ? 'new' : 'old'); - $old_fields['password'] = 'old'; - - // Notifies the admins of the profile update. - $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(); - - $globals->updateNbIns(); - $page->trigSuccess("La mise à jour a été faite avec succès."); - } else { - $page->trigError("La mise à jour a échoué. S'il te plaît, vérifie les valeurs."); - } - - // 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); - } - - // 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($user); - if ($account->active() && $account->sync_password) { - $account->set_password($pass_encrypted); - } - } - } - - - // Reloads the user profile, to ensure the latest version will - // be served to the administrator. - $mr = XDB::query($userinfo_query, $user->id())->fetchOneAssoc(); + // Account Form {{{ + $to_update = array(); + if (Post::has('disable_weak_access')) { + $to_update['weak_password'] = null; + } else if (Post::has('update_account')) { + if (Post::s('full_name') != $user->fullName()) { + // XXX: Update profile if a profile is associated + $to_update['full_name'] = Post::s('full_name'); + } + if (Post::s('display_name') != $user->displayName()) { + // XXX: Update profile if a profile is associated + $to_update['display_name'] = Post::s('display_name'); + } + if (Post::s('sex') != ($user->isFemale() ? 'female' : 'male')) { + $to_update['sex'] = Post::s('sex'); + } + if (!Post::blank('hashpass')) { + $to_update['password'] = Post::s('hashpass'); + // TODO: Propagate the password update to GoogleApps, when required. Eg: + // $account = new GoogleAppsAccount($user); + // if ($account->active() && $account->sync_password) { + // $account->set_password($pass_encrypted); + // } + } + if (!Post::blank('weak_password')) { + $to_update['weak_password'] = Post::s('weak_password'); + } + if (Post::i('token_access', 0) != ($user->token_access ? 1 : 0)) { + $to_update['token'] = Post::i('token_access') ? rand_url_id(16) : null; + } + if (Post::i('skin', 0) != $user->skin) { + $to_update['skin'] = Post::i('skin', 0); + if ($to_update['skin'] == 0) { + $to_update['skin'] = null; + } + } + if (Post::s('state') != $user->state) { + $to_update['state'] = Post::s('state'); + } + if (Post::i('is_admin', 0) != ($user->is_admin ? 1 : 0)) { + $to_update['is_admin'] = Post::b('is_admin'); + } + if (Post::s('type') != $user->type) { + $to_update['type'] = Post::s('type'); + } + if (Post::i('watch', 0) != ($user->watch ? 1 : 0)) { + $to_update['flags'] = new PlFlagset(); + $to_update['flags']->addFlag('watch', Post::i('watch')); + } + if (Post::t('comment') != $user->comment) { + $to_update['comment'] = Post::blank('comment') ? null : Post::t('comment'); + } + } + if (!empty($to_update)) { + // TODO: fetch the initial values of the fields, and eventually send + // a summary of the changes to an admin. + $set = array(); + foreach ($to_update as $k => $value) { + $set[] = XDB::format($k . ' = {?}', $value); + } + XDB::execute('UPDATE accounts + SET ' . implode(', ', $set) . ' + WHERE uid = ' . XDB::format('{?}', $user->id())); + $page->trigSuccess('Données du compte mise à jour avec succès'); + $user = User::getWithUID($user->id()); + } + // }}} + + // Profile form {{{ + if (Post::has('add_profile') || Post::has('del_profile') || Post::has('owner')) { + if (Post::i('del_profile', 0) != 0) { + XDB::execute('DELETE FROM account_profiles + WHERE uid = {?} AND pid = {?}', + $user->id(), Post::i('del_profile')); + } else if (!Post::blank('new_profile')) { + $profile = Profile::get(Post::t('new_profile')); + if (!$profile) { + $page->trigError('Le profil ' . Post::t('new_profile') . ' n\'existe pas'); + } else { + XDB::execute('INSERT IGNORE INTO account_profiles (uid, pid) + VALUES ({?}, {?})', + $user->id(), $profile->id()); + } + } + XDB::execute('UPDATE account_profiles + SET perms = IF(pid = {?}, CONCAT(perms, \',owner\'), REPLACE(perms, \'owner\', \'\')) + WHERE uid = {?}', + Post::i('owner'), $user->id()); + } + // }}} - break; + // Email forwards form {{{ + require_once("emails.inc.php"); + $redirect = ($registered ? new Redirect($user) : null); + if (Post::has('add_fwd')) { + $email = Post::t('email'); + if (!isvalid_email_redirection($email)) { + $page->trigError("Email non valide: $email"); + } else { + $redirect->add_email($email); + $page->trigSuccess("Ajout de $email effectué"); + } + } else if (!Post::blank('del_fwd')) { + $redirect->delete_email(Post::t('del_fwd')); + } else if (!Post::blank('activate_fwd')) { + $redirect->modify_one_email(Post::t('activate_fwd', true)); + } else if (!Post::blank('deactivate_fwd')) { + $redirect->modify_one_email(Post::t('deactivate_fwd', false)); + } else if (Post::has('disable_fwd')) { + $redirect->disable(); + } else if (Post::has('enable_fwd')) { + $redirect->enable(); + } else if (!Post::blank('clean_fwd')) { + $redirect->clean_errors(Post::t('clean_fwd')); + } + // }}} + + // Email alias form {{{ + if (Post::has('add_alias')) { + // Splits new alias in user and fqdn. + $alias = Env::t('email'); + if (strpos($alias, '@') !== false) { + list($alias, $domain) = explode('@', $alias); + } else { + $domain = $globals->mail->domain; + } - // User re-registration. - case "u_kill": - require_once('user.func.inc.php'); - user_clear_all_subs($user->id()); - $globals->updateNbIns(); - $page->trigSuccess($user->login() . ' 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; + // Checks for alias' user validity. + if (!preg_match('/[-a-z0-9\.]+/s', $alias)) { + $page->trigError("'$alias' n'est pas un alias valide"); + } - // 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; + // 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 { + $page->trigError("Impossible d'ajouter l'alias '$alias@$domain', 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); + $page->trigSuccess("Nouvel alias '$alias' ajouté"); + } else { + $page->trigError("Le domaine '$domain' n'est pas valide"); } + } else if (!Post::blank('del_alias')) { + 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é"); + } else if (!Post::blank('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); } + // }}} + + // Forum form {{{ + if (Post::has('b_edit')) { + XDB::execute("DELETE FROM forum_innd + WHERE uid = {?}", $user->id()); + if (Env::v('write_perm') != "" || Env::v('read_perm') != "" || Env::v('commentaire') != "" ) { + XDB::execute("INSERT INTO forum_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()); + } + } + // }}} + + + $page->addJsLink('ui.core.js'); + $page->addJsLink('ui.tabs.js'); - // Displays last login and last host information. $res = XDB::query("SELECT start, host - FROM logger.sessions + FROM #logger#.sessions WHERE uid = {?} AND suid = 0 ORDER BY start DESC LIMIT 1", $user->id()); @@@ -817,15 -894,12 +816,15 @@@ $page->setTitle('Administration - Décédés'); $res = XDB::iterator( - "SELECT u.promo, u.nom, u.prenom, u.deces, u.hruid, DATE(MAX(s.start)) AS last - FROM #x4dat#.auth_user_md5 AS u - LEFT JOIN #logger#.sessions AS s ON (s.uid = u.user_id AND suid = 0) - WHERE perms IN ('admin', 'user') AND deces <> 0 - GROUP BY u.user_id - ORDER BY u.promo, u.nom"); + "SELECT a.hruid, pd.promo, p.ax_id, pd.directory_name, p.deathdate, DATE(MAX(s.start)) AS last - FROM accounts AS a - INNER JOIN account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms)) - INNER JOIN profiles AS p ON (p.pid = ap.pid) - INNER JOIN profile_display AS pd ON (pd.pid = p.pid) - LEFT JOIN logger.sessions AS s ON (s.uid = a.uid AND suid = 0) ++ FROM #x4dat#.accounts AS a ++ INNER JOIN #x4dat#.account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms)) ++ INNER JOIN #x4dat#.profiles AS p ON (p.pid = ap.pid) ++ INNER JOIN #x4dat#.profile_display AS pd ON (pd.pid = p.pid) ++ LEFT JOIN #logger#.sessions AS s ON (s.uid = a.uid AND suid = 0) + WHERE a.state = 'active' AND p.deathdate IS NOT NULL + GROUP BY a.uid + ORDER BY pd.promo, pd.sort_name"); $page->assign('dead', $res); } @@@ -937,12 -1040,10 +936,12 @@@ $table_editor->describe('text', 'Description du problème', false); $table_editor->apply($page, $action, $id); } - function handler_logger_actions(&$page, $action = 'list', $id = null) { + + function handler_logger_actions(&$page, $action = 'list', $id = null) + { $page->setTitle('Administration - Actions'); $page->assign('title', 'Gestion des actions de logger'); - $table_editor = new PLTableEditor('admin/logger/actions','logger.actions','id'); + $table_editor = new PLTableEditor('admin/logger/actions','#logger#.actions','id'); $table_editor->describe('text','intitulé',true); $table_editor->describe('description','description',true); $table_editor->apply($page, $action, $id); @@@ -1083,13 -1172,13 +1082,13 @@@ $sql = "SELECT w.ip, IF(s.ip IS NULL, IF(w.ip = s2.ip, s2.host, s2.forward_host), IF(w.ip = s.ip, s.host, s.forward_host)), - w.mask, w.detection, w.state, u.hruid - FROM #x4dat#.ip_watch AS w - LEFT JOIN #logger#.sessions AS s ON (s.ip = w.ip) - LEFT JOIN #logger#.sessions AS s2 ON (s2.forward_ip = w.ip) - LEFT JOIN #x4dat#.auth_user_md5 AS u ON (u.user_id = s.uid) - GROUP BY w.ip, u.hruid - ORDER BY w.state, w.ip, u.hruid"; + w.mask, w.detection, w.state, a.hruid - FROM ip_watch AS w - LEFT JOIN logger.sessions AS s ON (s.ip = w.ip) - LEFT JOIN logger.sessions AS s2 ON (s2.forward_ip = w.ip) - LEFT JOIN accounts AS a ON (a.uid = s.uid) ++ FROM #x4dat#.ip_watch AS w ++ LEFT JOIN #logger#.sessions AS s ON (s.ip = w.ip) ++ LEFT JOIN #logger#.sessions AS s2 ON (s2.forward_ip = w.ip) ++ LEFT JOIN #x4dat#.accounts AS a ON (a.uid = s.uid) + GROUP BY w.ip, a.hruid + ORDER BY w.state, w.ip, a.hruid"; $it = Xdb::iterRow($sql); $table = array(); @@@ -1117,14 -1206,14 +1116,14 @@@ $page->assign('table', $table); } elseif ($action == 'edit') { $sql = "SELECT w.detection, w.state, w.last, w.description, w.mask, - u1.hruid AS edit, u2.hruid AS hruid, s.host - FROM #x4dat#.ip_watch AS w - LEFT JOIN #x4dat#.auth_user_md5 AS u1 ON (u1.user_id = w.uid) - LEFT JOIN #logger#.sessions AS s ON (w.ip = s.ip) - LEFT JOIN #x4dat#.auth_user_md5 AS u2 ON (u2.user_id = s.uid) + a1.hruid AS edit, a2.hruid AS hruid, s.host - FROM ip_watch AS w - LEFT JOIN accounts AS a1 ON (a1.uid = w.uid) - LEFT JOIN logger.sessions AS s ON (w.ip = s.ip) - LEFT JOIN accounts AS a2 ON (a2.uid = s.uid) ++ FROM #x4dat#.ip_watch AS w ++ LEFT JOIN #x4dat#.accounts AS a1 ON (a1.uid = w.uid) ++ LEFT JOIN #logger#.sessions AS s ON (w.ip = s.ip) ++ LEFT JOIN #x4dat#.accounts AS a2 ON (a2.uid = s.uid) WHERE w.ip = {?} - GROUP BY u2.hruid - ORDER BY u2.hruid"; + GROUP BY a2.hruid + ORDER BY a2.hruid"; $it = Xdb::iterRow($sql, ip_to_uint($ip)); $props = array(); diff --cc modules/auth.php index 5376034,99bce24..ead9cd2 --- a/modules/auth.php +++ b/modules/auth.php @@@ -68,9 -66,29 +68,9 @@@ class AuthModule extends PLModul } } } - - $where = join(' OR ',$membres); - - $all = XDB::iterRow( - "SELECT u.prenom,u.nom,a.alias - FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON ( u.user_id = a.id AND a.type!='homonyme' ) - WHERE $where - ORDER BY nom"); - - $res = "\n\n\n\n"; - - while (list ($prenom1,$nom1,$email1) = $all->next()) { - $res .= "\n"; - $res .= "\t$nom1\n"; - $res .= "\t$prenom1\n"; - $res .= "\t$email1\n"; - $res .= "\n\n"; - } - $res .= "\n\n"; - header('Content-Type: text/xml; charset="UTF-8"'); + pl_content_headers("text/xml"); echo $res; } exit; diff --cc modules/payment.php index 48c9144,84a285e..250988a --- a/modules/payment.php +++ b/modules/payment.php @@@ -192,19 -196,19 +192,19 @@@ class PaymentModule extends PLModul } echo ($ref = $matches[1]); - $res = XDB::query("SELECT mail,text,confirmation + $res = XDB::query("SELECT mail, text, confirmation - FROM paiement.paiements + FROM #paiement#.paiements WHERE id={?}", $ref); - if (!list($conf_mail,$conf_title,$conf_text) = $res->fetchOneRow()) { + if (!list($conf_mail, $conf_title, $conf_text) = $res->fetchOneRow()) { cb_erreur("référence de commande inconnue"); } /* on extrait le code de retour */ if ($champ906 != "0000") { - $res = XDB::query("SELECT rcb.text,c.id,c.text + $res = XDB::query('SELECT rcb.text, c.id, c.text - FROM paiement.codeRCB AS rcb - LEFT JOIN paiement.codeC AS c ON (rcb.codeC = c.id) + FROM #paiement#.codeRCB AS rcb - LEFT JOIN #paiement#.codeC AS c ON rcb.codeC=c.id - WHERE rcb.id={?}", $champ906); ++ LEFT JOIN #paiement#.codeC AS c ON (rcb.codeC = c.id) + WHERE rcb.id = {?}', $champ906); if (list($rcb_text, $c_id, $c_text) = $res->fetchOneRow()) { cb_erreur("erreur lors du paiement : $c_text ($c_id)"); } else{ @@@ -213,9 -217,9 +213,9 @@@ } /* on fait l'insertion en base de donnees */ - XDB::execute("INSERT INTO paiement.transactions (id, uid, ref, fullref, montant, cle, comment) - XDB::execute("INSERT INTO #paiement#.transactions (id,uid,ref,fullref,montant,cle,comment) - VALUES ({?},{?},{?},{?},{?},{?},{?})", - $champ901, $uid, $ref, $champ200, $montant, $champ905,Env::v('comment')); ++ XDB::execute("INSERT INTO #paiement#.transactions (id, uid, ref, fullref, montant, cle, comment) + VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?})", + $champ901, $user->id(), $ref, $champ200, $montant, $champ905, Env::v('comment')); // We check if it is an Xnet payment and then update the related ML. $res = XDB::query('SELECT eid @@@ -299,17 -310,17 +299,17 @@@ } $ref = $matches[1]; - $res = XDB::query("SELECT mail,text,confirmation + $res = XDB::query("SELECT mail, text, confirmation - FROM paiement.paiements + FROM #paiement#.paiements - WHERE id={?}", $ref); + WHERE id = {?}", $ref); if (!list($conf_mail,$conf_title,$conf_text) = $res->fetchOneRow()) { paypal_erreur("référence de commande inconnue"); } /* on fait l'insertion en base de donnees */ - XDB::execute("INSERT INTO paiement.transactions (id, uid, ref, fullref, montant, cle, comment) - XDB::execute("INSERT INTO #paiement#.transactions (id,uid,ref,fullref,montant,cle,comment) - VALUES ({?},{?},{?},{?},{?},{?},{?})", - $no_transaction, $uid, $ref, $fullref, $montant, $clef, Env::v('comment')); ++ XDB::execute("INSERT INTO #paiement#.transactions (id, uid, ref, fullref, montant, cle, comment) + VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?})", + $no_transaction, $user->id(), $ref, $fullref, $montant, $clef, Env::v('comment')); // We check if it is an Xnet payment and then update the related ML. $res = XDB::query('SELECT eid @@@ -393,22 -438,25 +393,22 @@@ foreach($tit as $foo) { $pid = $foo['id']; if (may_update()) { - $res = XDB::query("SELECT IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom, - u.prenom, u.promo, a.alias, timestamp AS `date`, t.comment, montant - FROM {$globals->money->mpay_tprefix}transactions AS t - INNER JOIN auth_user_md5 AS u ON ( t.uid = u.user_id ) - INNER JOIN aliases AS a ON ( t.uid = a.id AND a.type='a_vie' ) - WHERE ref = {?} ".$orderby, $pid); - $trans[$pid] = $res->fetchAllAssoc(); - $sum = 0; - foreach ($trans[$pid] as $i => $t) { - $sum += strtr(substr($t['montant'], 0, strpos($t['montant'], 'EUR')), ',', '.'); - $trans[$pid][$i]['montant'] = str_replace('EUR', '€', $t['montant']); - } - $trans[$pid][] = array('nom' => 'somme totale', - 'montant' => strtr($sum, '.', ',').' €'); + $res = XDB::query('SELECT t.uid, timestamp AS `date`, t.comment, montant + FROM ' . $globals->money->mpay_tprefix . 'transactions AS t + WHERE t.ref = {?}', $pid); + $trans[$pid] = User::getBulkUsersWithUIDs($res->fetchAllAssoc(), 'uid', 'user'); + $sum = 0; + foreach ($trans[$pid] as $i => $t) { + $sum += strtr(substr($t['montant'], 0, strpos($t['montant'], 'EUR')), ',', '.'); + $trans[$pid][$i]['montant'] = str_replace('EUR', '€', $t['montant']); + } + $trans[$pid][] = array('nom' => 'somme totale', + 'montant' => strtr($sum, '.', ',').' €'); } $res = XDB::iterRow("SELECT e.eid, e.short_name, e.intitule, ep.nb, ei.montant, ep.paid - FROM groupex.evenements AS e - LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND uid = {?}) - INNER JOIN groupex.evenements_items AS ei ON (ep.eid = ei.eid AND ep.item_id = ei.item_id) + FROM #groupex#.evenements AS e + LEFT JOIN #groupex#.evenements_participants AS ep ON (ep.eid = e.eid AND uid = {?}) + INNER JOIN #groupex#.evenements_items AS ei ON (ep.eid = ei.eid AND ep.item_id = ei.item_id) WHERE e.paiement_id = {?}", S::v('uid'), $pid); $event[$pid] = array(); diff --cc modules/profile/groups.inc.php index 97f85f5,1b11e8d..95dc483 --- a/modules/profile/groups.inc.php +++ b/modules/profile/groups.inc.php @@@ -109,14 -109,14 +109,14 @@@ class ProfileGroups extends ProfilePag public function _prepare(PlPage &$page, $id) { $page->assign('mygroups', XDB::iterator("SELECT a.nom, a.site, a.diminutif, a.unsub_url, a.pub, m.perms - FROM groupex.asso AS a - INNER JOIN groupex.membres AS m ON (m.asso_id = a.id) + FROM #groupex#.asso AS a + INNER JOIN #groupex#.membres AS m ON (m.asso_id = a.id) WHERE m.uid = {?} AND (a.cat = 'GroupesX' OR a.cat = 'Institutions')", - S::i('uid'))); + $this->pid())); $page->assign('listgroups', XDB::iterator("SELECT a.nom, a.diminutif, a.sub_url, IF (a.cat = 'Institutions', a.cat, d.nom) AS dom - FROM groupex.asso AS a - LEFT JOIN groupex.dom AS d ON (d.id = a.dom) + FROM #groupex#.asso AS a + LEFT JOIN #groupex#.dom AS d ON (d.id = a.dom) WHERE a.inscriptible != 0 AND (a.cat = 'GroupesX' OR a.cat = 'Institutions') ORDER BY a.cat, a.dom, a.nom")); diff --cc modules/search.php index f70e634,9820f3b..c76c1b5 --- a/modules/search.php +++ b/modules/search.php @@@ -429,11 -431,11 +429,11 @@@ class SearchModule extends PLModul $page->assign('onchange', 'changeCountry(this.value)'); break; case 'fonction': - $db = '`fonctions_def`'; - $field = '`fonction_fr`'; + $db = 'fonctions_def'; + $field = 'fonction_fr'; break; case 'diploma': - header('Content-Type: text/xml; charset="UTF-8"'); + pl_content_headers("text/xml"); $this->get_diplomas(); $page->changeTpl('search/adv.grade.form.tpl', NO_SKIN); return; diff --cc modules/xnetevents.php index d89dd7e,fb9406e..bda8816 --- a/modules/xnetevents.php +++ b/modules/xnetevents.php @@@ -116,18 -116,20 +116,18 @@@ class XnetEventsModule extends PLModul } $page->assign('archive', $archive); - $evenements = XDB::iterator( - "SELECT e.*, LEFT(10, e.debut) AS first_day, LEFT(10, e.fin) AS last_day, - IF(e.deadline_inscription, e.deadline_inscription >= LEFT(NOW(), 10), - 1) AS inscr_open, e.deadline_inscription, - u.nom, u.prenom, u.promo, a.alias, - MAX(ep.nb) IS NOT NULL AS inscrit, MAX(ep.paid) AS paid - FROM #groupex#.evenements AS e - INNER JOIN #x4dat#.auth_user_md5 AS u ON u.user_id = e.organisateur_uid - INNER JOIN #x4dat#.aliases AS a ON (a.type = 'a_vie' AND a.id = u.user_id) - LEFT JOIN #groupex#.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?}) - WHERE asso_id = {?} - AND archive = " . ($archive ? "1 " : "0 ") - . "GROUP BY e.eid - ORDER BY inscr_open DESC, debut DESC", S::v('uid'), $globals->asso('id')); + $evenements = XDB::iterator('SELECT e.*, LEFT(10, e.debut) AS first_day, LEFT(10, e.fin) AS last_day, + IF(e.deadline_inscription, + e.deadline_inscription >= LEFT(NOW(), 10), + 1) AS inscr_open, + e.deadline_inscription, + MAX(ep.nb) IS NOT NULL AS inscrit, MAX(ep.paid) AS paid - FROM groupex.evenements AS e - LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?}) ++ FROM #groupex#.evenements AS e ++ LEFT JOIN #groupex#.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?}) + WHERE asso_id = {?} AND archive = {?} + GROUP BY e.eid + ORDER BY inscr_open DESC, debut DESC', + S::i('uid'), $globals->asso('id'), $archive ? 1 : 0); $evts = array(); $undisplayed_events = 0; @@@ -140,12 -142,14 +140,12 @@@ } $e['show_participants'] = ($e['show_participants'] && (is_member() || may_update())); - $res = XDB::query( - "SELECT titre, details, montant, ei.item_id, nb, ep.paid - FROM #groupex#.evenements_items AS ei - LEFT JOIN #groupex#.evenements_participants AS ep - ON (ep.eid = ei.eid AND ep.item_id = ei.item_id AND uid = {?}) - WHERE ei.eid = {?}", - S::v('uid'), $e['eid']); - $e['moments'] = $res->fetchAllAssoc(); + $e['moments'] = XDB::fetchAllAssoc('SELECT titre, details, montant, ei.item_id, nb, ep.paid - FROM groupex.evenements_items AS ei - LEFT JOIN groupex.evenements_participants AS ep ++ FROM #groupex#.evenements_items AS ei ++ LEFT JOIN #groupex#.evenements_participants AS ep + ON (ep.eid = ei.eid AND ep.item_id = ei.item_id AND ep.uid = {?}) + WHERE ei.eid = {?}', + S::i('uid'), $e['eid']); $e['topay'] = 0; $e['paid'] = $e['moments'][0]['paid']; @@@ -592,25 -593,63 +589,25 @@@ $page->assign('moments', $evt['moments']); } - $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo'); - $whereitemid = is_null($item_id) ? '' : "AND ep.item_id = $item_id"; - $res = XDB::iterRow( - 'SELECT UPPER(SUBSTRING(IF(u.nom IS NULL, m.nom, - IF(u.nom_usage<>"", u.nom_usage, u.nom)), 1, 1)), - COUNT(DISTINCT ep.uid) - FROM #groupex#.evenements_participants AS ep - INNER JOIN #groupex#.evenements AS e ON (ep.eid = e.eid) - LEFT JOIN #groupex#.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id) - LEFT JOIN #x4dat#.auth_user_md5 AS u ON ( u.user_id = ep.uid ) - WHERE ep.eid = {?} '.$whereitemid . ' - GROUP BY UPPER(SUBSTRING(IF(u.nom IS NULL,m.nom,u.nom), 1, 1))', $evt['eid']); - - $alphabet = array(); - $nb_tot = 0; - while (list($char, $nb) = $res->next()) { - $alphabet[ord($char)] = $char; - $nb_tot += $nb; - if (Env::has('initiale') && $char == mb_strtoupper(Env::v('initiale'))) { - $tot = $nb; - } - } - ksort($alphabet); - $page->assign('alphabet', $alphabet); - if ($evt['paiement_id']) { - $res = XDB::iterator( - "SELECT IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom, u.prenom, - u.promo, a.alias AS email, t.montant - FROM {$globals->money->mpay_tprefix}transactions AS t - INNER JOIN #x4dat#.auth_user_md5 AS u ON(t.uid = u.user_id) - INNER JOIN #x4dat#.aliases AS a ON (a.id = t.uid AND a.type='a_vie' ) - LEFT JOIN #groupex#.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?}) - WHERE t.ref = {?} AND ep.uid IS NULL", - $evt['eid'], $evt['paiement_id']); - $page->assign('oublis', $res->total()); - $page->assign('oubliinscription', $res); - } - - $absents = XDB::iterator("SELECT p.uid, - IF(m.origine = 'X', IF(u.nom_usage != '', u.nom_usage, u.nom), m.nom) AS nom, - IF(m.origine = 'X', u.prenom, u.prenom) AS prenom, - IF(m.origine = 'X', u.promo, m.origine) AS promo, - IF(m.origine = 'X', FIND_IN_SET('femme', u.flags), m.sexe) AS sexe, - IF(m.origine = 'X', a.alias, m.email) AS email - FROM #groupex#.evenements_participants AS p - INNER JOIN #groupex#.membres AS m USING(uid) - LEFT JOIN #groupex#.evenements_participants AS p2 ON (p2.uid = m.uid AND p2.eid = p.eid - AND p2.nb != 0) - LEFT JOIN #x4dat#.auth_user_md5 AS u ON (u.user_id = m.uid) - LEFT JOIN #x4dat#.aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') - WHERE p.eid = {?} AND p2.eid IS NULL - " . (Env::v('initiale') ? " AND IF(u.nom IS NULL, m.nom, - IF(u.nom_usage<>'', u.nom_usage, u.nom)) LIKE '" . Env::v('initiale') . "%'" - : "") . " - GROUP BY m.uid - ORDER BY nom, prenom, promo", $evt['eid']); + $infos = User::getBulkUsersWithUIDs( + XDB::fetchAllAssoc('SELECT t.uid, t.montant + FROM ' . $globals->money->mpay_tprefix . 'transactions AS t - LEFT JOIN groupex.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?}) ++ LEFT JOIN #groupex#.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?}) + WHERE t.ref = {?} AND ep.uid IS NULL', + $evt['eid'], $evt['paiement_id']), + 'uid', 'user'); + $page->assign('oublis', count($infos)); + $page->assign('oubliinscription', $infos); + } + + $absents = User::getBulkUsersFromDB('SELECT p.uid - FROM groupex.evenements_participants AS p - LEFT JOIN groupex.evenements_participants AS p2 ON (p2.uid = p.uid ++ FROM #groupex#.evenements_participants AS p ++ LEFT JOIN #groupex#.evenements_participants AS p2 ON (p2.uid = p.uid + AND p2.eid = p.eid + AND p2.nb != 0) + WHERE p.eid = {?} AND p2.eid IS NULL + GROUP BY p.uid', $evt['eid']); $ofs = Env::i('offset'); $tot = (Env::v('initiale') ? $tot : $nb_tot); diff --cc modules/xnetevents/xnetevents.inc.php index eab9557,d2725d4..fe8fc4a --- a/modules/xnetevents/xnetevents.inc.php +++ b/modules/xnetevents/xnetevents.inc.php @@@ -27,25 -27,31 +27,25 @@@ function get_event_detail($eid, $item_i if (is_null($asso_id)) { $asso_id = $globals->asso('id'); } - $res = XDB::query( - "SELECT SUM(nb) AS nb_tot, COUNT(DISTINCT ep.uid) AS nb, e.*, - IF(e.deadline_inscription, e.deadline_inscription >= LEFT(NOW(), 10), 1) AS inscr_open, - LEFT(10, e.debut) AS first_day, LEFT(10, e.fin) AS last_day, - LEFT(NOW(), 10) AS now, ei.titre, - al.vid AS absent_list, pl.vid AS participant_list, - bl.vid AS payed_list, ul.vid AS booked_unpayed_list, - a.nom, a.prenom, a.promo, aa.alias - FROM #groupex#.evenements AS e - INNER JOIN #x4dat#.auth_user_md5 AS a ON a.user_id = e.organisateur_uid - INNER JOIN #x4dat#.aliases AS aa ON (aa.type = 'a_vie' AND aa.id = a.user_id) - INNER JOIN #groupex#.evenements_items AS ei ON (e.eid = ei.eid) - LEFT JOIN #groupex#.evenements_participants AS ep ON (e.eid = ep.eid AND ei.item_id = ep.item_id) - LEFT JOIN #x4dat#.virtual AS al ON (al.type = 'evt' AND al.alias = CONCAT(short_name, {?})) - LEFT JOIN #x4dat#.virtual AS pl ON (pl.type = 'evt' AND pl.alias = CONCAT(short_name, {?})) - LEFT JOIN #x4dat#.virtual AS bl ON (bl.type = 'evt' AND bl.alias = CONCAT(short_name, {?})) - LEFT JOIN #x4dat#.virtual AS ul ON (ul.type = 'evt' AND ul.alias = CONCAT(short_name, {?})) - WHERE (e.eid = {?} OR e.short_name = {?}) AND ei.item_id = {?} AND e.asso_id = {?} - GROUP BY ei.item_id", - '-absents@' . $globals->xnet->evts_domain, - '-participants@' . $globals->xnet->evts_domain, - '-paye@' . $globals->xnet->evts_domain, - '-participants-non-paye@' . $globals->xnet->evts_domain, - $eid, $eid, $item_id ? $item_id : 1, $asso_id); - + $res = XDB::query('SELECT SUM(nb) AS nb_tot, COUNT(DISTINCT ep.uid) AS nb, e.*, + IF(e.deadline_inscription, + e.deadline_inscription >= LEFT(NOW(), 10), + 1) AS inscr_open, + LEFT(10, e.debut) AS start_day, LEFT(10, e.fin) AS last_day, + LEFT(NOW(), 10) AS now, + ei.titre, al.vid AS absent_list, pl.vid AS participant_list - FROM groupex.evenements AS e - INNER JOIN groupex.evenements_items AS ei ON (e.eid = ei.eid) - LEFT JOIN groupex.evenements_participants AS ep ON(e.eid = ep.eid AND ei.item_id = ep.item_id) - LEFT JOIN virtual AS al ON(al.type = \'evt\' AND al.alias = CONCAT(short_name, {?})) - LEFT JOIN virtual AS pl ON(pl.type = \'evt\' AND pl.alias = CONCAT(short_name, {?})) ++ FROM #groupex#.evenements AS e ++ INNER JOIN #groupex#.evenements_items AS ei ON (e.eid = ei.eid) ++ LEFT JOIN #groupex#.evenements_participants AS ep ON(e.eid = ep.eid AND ei.item_id = ep.item_id) ++ LEFT JOIN #x4dat#.virtual AS al ON(al.type = \'evt\' AND al.alias = CONCAT(short_name, {?})) ++ LEFT JOIN #x4dat#.virtual AS pl ON(pl.type = \'evt\' AND pl.alias = CONCAT(short_name, {?})) + WHERE (e.eid = {?} OR e.short_name = {?}) AND ei.item_id = {?} AND e.asso_id = {?} + GROUP BY ei.item_id', + '-absents@'.$globals->xnet->evts_domain, + '-participants@'.$globals->xnet->evts_domain, + '-paye@' . $globals->xnet->evts_domain, + '-participants-non-paye@' . $globals->xnet->evts_domain, + $eid, $eid, $item_id ? $item_id : 1, $asso_id); $evt = $res->fetchOneAssoc(); if (!$evt) { @@@ -57,24 -63,28 +57,24 @@@ // smart calculation of the total number if (!$item_id) { - $res = XDB::query( - "SELECT MAX(nb) - FROM #groupex#.evenements AS e - INNER JOIN #groupex#.evenements_items AS ei ON (e.eid = ei.eid) - LEFT JOIN #groupex#.evenements_participants AS ep - ON (e.eid = ep.eid AND ei.item_id = ep.item_id) - WHERE e.eid = {?} - GROUP BY ep.uid", $evt['eid']); + $res = XDB::query('SELECT MAX(nb) - FROM groupex.evenements AS e - INNER JOIN groupex.evenements_items AS ei ON (e.eid = ei.eid) - LEFT JOIN groupex.evenements_participants AS ep ON (e.eid = ep.eid AND ei.item_id = ep.item_id) ++ FROM #groupex#.evenements AS e ++ INNER JOIN #groupex#.evenements_items AS ei ON (e.eid = ei.eid) ++ LEFT JOIN #groupex#.evenements_participants AS ep ON (e.eid = ep.eid AND ei.item_id = ep.item_id) + WHERE e.eid = {?} + GROUP BY ep.uid', $evt['eid']); $evt['nb_tot'] = array_sum($res->fetchColumn()); $evt['titre'] = ''; $evt['item_id'] = 0; } - $res = XDB::query( - "SELECT titre, details, montant, ei.item_id, nb, ep.paid, FIND_IN_SET('notify_payment', ep.flags) AS notify_payment - FROM #groupex#.evenements_items AS ei - LEFT JOIN #groupex#.evenements_participants AS ep - ON (ep.eid = ei.eid AND ep.item_id = ei.item_id AND uid = {?}) - WHERE ei.eid = {?}", - S::v('uid'), $evt['eid']); - $evt['moments'] = $res->fetchAllAssoc(); - + $evt['moments'] = XDB::fetchAllAssoc('SELECT titre, details, montant, ei.item_id, nb, + ep.paid, FIND_IN_SET(\'notify_payment\', ep.flags) AS notify_payment - FROM groupex.evenements_items AS ei - LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = ei.eid AND ep.item_id = ei.item_id ++ FROM #groupex#.evenements_items AS ei ++ LEFT JOIN #groupex#.evenements_participants AS ep ON (ep.eid = ei.eid AND ep.item_id = ei.item_id + AND uid = {?}) + WHERE ei.eid = {?}', + S::i('uid'), $evt['eid']); $evt['topay'] = 0; $evt['paid'] = 0; $evt['notify_payment'] = false; @@@ -114,25 -133,36 +114,25 @@@ function get_event_participants(&$evt, $money = $evt['money'] && (function_exists('may_update')) && may_update(); $pay_id = $evt['paiement_id']; - $query = - "SELECT IF(m.origine != 'X',m.nom,IF(u.nom_usage<>'', u.nom_usage, u.nom)) AS nom, - IF(m.origine != 'X',m.prenom,u.prenom) AS prenom, - IF(m.origine != 'X','extérieur',u.promo) AS promo, - IF(m.origine != 'X' OR u.perms = 'pending',m.email,a.alias) AS email, - IF(m.origine != 'X',m.sexe,FIND_IN_SET('femme', u.flags)) AS femme, - m.perms='admin' AS admin, - (m.origine = 'X' OR m.origine IS NULL) AS x, - ep.uid, SUM(ep.paid) AS paid, SUM(ep.nb) AS nb, - FIND_IN_SET('notify_payment', ep.flags) AS notify_payment - FROM #groupex#.evenements_participants AS ep - INNER JOIN #groupex#.evenements AS e ON (ep.eid = e.eid) - LEFT JOIN #groupex#.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id) - LEFT JOIN #x4dat#.auth_user_md5 AS u ON ( u.user_id = ep.uid ) - LEFT JOIN #x4dat#.aliases AS a ON ( a.id = ep.uid AND a.type='a_vie' ) - WHERE ep.eid = {?} - ".(($item_id)?" AND item_id = $item_id":"")." - $where - GROUP BY ep.uid - ORDER BY $tri $limit"; + $append = $item_id ? XDB::foramt(' AND ep.item_id = {?}', $item_id) : ''; + $query = XDB::fetchAllAssoc('uid', 'SELECT ep.uid, SUM(ep.paid) AS paid, SUM(ep.nb) AS nb, + FIND_IN_SET(\'notify_payment\', ep.flags) AS notify_payment - FROM groupex.evenements_participants AS ep ++ FROM #groupex#.evenements_participants AS ep + WHERE ep.eid = {?} AND nb > 0 ' . $append . ' + GROUP BY ep.uid', $eid); + $uf = new UserFilter(new UFC_True(), $tri); + $users = User::getBulkUsersWithUIDs($uf->filter(array_keys($query), $count, $offset)); + $tab = array(); + foreach ($users as $user) { + $uid = $user->id(); + $tab[$uid] = $query[$uid]; + $tab[$uid]['user'] = $user; + } if ($item_id) { - $res = XDB::query($query, $eid); - return $res->fetchAllAssoc(); + return $tab; } - $res = XDB::iterator($query, $eid); - $tab = array(); - $user = 0; - $evt['adminpaid'] = 0; $evt['telepaid'] = 0; $evt['topay'] = 0; @@@ -151,11 -186,12 +151,11 @@@ } } $u['telepayment'] = $u['paid'] - $u['adminpaid']; - $res_ = XDB::iterator( - "SELECT ep.nb, ep.item_id, ei.montant - FROM #groupex#.evenements_participants AS ep - INNER JOIN #groupex#.evenements_items AS ei ON (ei.eid = ep.eid AND ei.item_id = ep.item_id) - WHERE ep.eid = {?} AND ep.uid = {?}", - $eid, $u['uid']); + $res_ = XDB::iterator('SELECT ep.nb, ep.item_id, ei.montant - FROM groupex.evenements_participants AS ep - INNER JOIN groupex.evenements_items AS ei ON (ei.eid = ep.eid AND ei.item_id = ep.item_id) ++ FROM #groupex#.evenements_participants AS ep ++ INNER JOIN #groupex#.evenements_items AS ei ON (ei.eid = ep.eid AND ei.item_id = ep.item_id) + WHERE ep.eid = {?} AND ep.uid = {?}', + $eid, $uid); while ($i = $res_->next()) { $u[$i['item_id']] = $i['nb']; $u['montant'] += $i['montant']*$i['nb']; @@@ -299,24 -336,25 +299,24 @@@ function event_change_shortname(&$page } foreach (array('-participants@', '-paye@', '-participants-non-paye@') as $v) { - XDB::execute("INSERT IGNORE INTO virtual_redirect ( - SELECT {?} AS vid, IF(a.alias IS NULL, m.email, CONCAT(a.alias, {?})) AS redirect - FROM #groupex#.evenements_participants AS ep - LEFT JOIN #groupex#.membres AS m ON (ep.uid = m.uid) - LEFT JOIN #x4dat#.auth_user_md5 AS u ON (u.user_id = ep.uid) - LEFT JOIN #x4dat#.aliases AS a ON (a.id = ep.uid AND a.type = 'a_vie') - WHERE ep.eid = {?} AND " . $where[$v] . " - GROUP BY ep.uid)", - $lastid[$v], '@' . $globals->mail->domain, $eid); + XDB::execute("INSERT IGNORE INTO virtual_redirect ( + SELECT {?} AS vid, IF(al.alias IS NULL, a.email, CONCAT(al.alias, {?})) AS redirect - FROM groupex.evenements_participants AS ep - LEFT JOIN accounts AS a ON (ep.uid = a.uid) - LEFT JOIN aliases AS al ON (al.id = a.uid AND al.type = 'a_vie') ++ FROM #groupex#.evenements_participants AS ep ++ LEFT JOIN #x4dat#.accounts AS a ON (ep.uid = a.uid) ++ LEFT JOIN #x4dat#.aliases AS al ON (al.id = a.uid AND al.type = 'a_vie') + WHERE ep.eid = {?} AND " . $where[$v] . " + GROUP BY ep.uid)", + $lastid[$v], '@' . $globals->mail->domain, $eid); } - XDB::execute("INSERT IGNORE INTO virtual_redirect ( - SELECT {?} AS vid, IF(a.alias IS NULL, m.email, CONCAT(a.alias, {?})) AS redirect - FROM #groupex#.membres AS m - LEFT JOIN #groupex#.evenements_participants AS ep ON (ep.uid = m.uid AND ep.eid = {?}) - LEFT JOIN #x4dat#.auth_user_md5 AS u ON (u.user_id = m.uid) - LEFT JOIN #x4dat#.aliases AS a ON (a.id = m.uid AND a.type = 'a_vie') - WHERE m.asso_id = {?} AND ep.uid IS NULL - GROUP BY m.uid)", - $lastid['-absents@'], '@' . $globals->mail->domain, $eid, $globals->asso('id')); + XDB::execute("INSERT IGNORE INTO virtual_redirect ( + SELECT {?} AS vid, IF(al.alias IS NULL, a.email, CONCAT(al.alias, {?})) AS redirect - FROM groupex.membres AS m - LEFT JOIN groupex.evenements_participants AS ep ON (ep.uid = m.uid AND ep.eid = {?}) - LEFT JOIN accounts AS a ON (a.uid = m.uid) - LEFT JOIN aliases AS al ON (al.id = a.uid AND al.type = 'a_vie') ++ FROM #groupex#.membres AS m ++ LEFT JOIN #x4dat#.accounts AS a ON (a.uid = m.uid) ++ LEFT JOIN #x4dat#.aliases AS al ON (al.id = a.uid AND al.type = 'a_vie') ++ LEFT JOIN #groupex#.evenements_participants AS ep ON (ep.uid = m.uid AND ep.eid = {?}) + WHERE m.asso_id = {?} AND ep.uid IS NULL + GROUP BY m.uid)", + $lastid['-absents@'], '@' . $globals->mail->domain, $eid, $globals->asso('id')); return $new; } diff --cc modules/xnetgrp.php index a1af600,6c71978..3b43dd2 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@@ -81,30 -130,32 +81,30 @@@ class XnetGrpModule extends PLModul Env::i('unread'), S::i('uid')); pl_redirect("#art" . Env::i('unread')); } - $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 #x4dat#.auth_user_md5 AS u USING(user_id) - 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 <= {?}) - AND (promo_max = 0 OR promo_max >= {?}) - AND r.announce_id IS NULL - ORDER BY a.peremption", - S::i('uid'), $globals->asso('id'), S::i('promo'), S::i('promo')); - $index = XDB::iterator("SELECT a.id, a.titre, r.user_id IS NULL AS nonlu - FROM #groupex#.announces AS a - LEFT JOIN #groupex#.announces_read AS r ON (a.id = r.announce_id AND r.user_id = {?}) - WHERE asso_id = {?} AND peremption >= CURRENT_DATE() + // XXX: Fix promo_min; promo_max - $arts = XDB::iterator("SELECT a.*, FIND_IN_SET('photo', a.flags) AS photo - FROM groupex.announces AS a - 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 <= {?}) - AND (promo_max = 0 OR promo_max >= {?}) - AND r.announce_id IS NULL - ORDER BY a.peremption", - S::i('uid'), $globals->asso('id'), S::i('promo'), S::i('promo')); - $index = XDB::iterator("SELECT a.id, a.titre, r.user_id IS NULL AS nonlu - FROM groupex.announces AS a - LEFT JOIN groupex.announces_read AS r ON (a.id = r.announce_id AND r.user_id = {?}) - WHERE asso_id = {?} AND peremption >= CURRENT_DATE() ++ $arts = XDB::iterator("SELECT a.*, FIND_IN_SET('photo', a.flags) AS photo ++ FROM #groupex#.announces AS a ++ 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 <= {?}) AND (promo_max = 0 OR promo_max >= {?}) -- ORDER BY a.peremption", ++ AND r.announce_id IS NULL ++ ORDER BY a.peremption", ++ S::i('uid'), $globals->asso('id'), S::i('promo'), S::i('promo')); ++ $index = XDB::iterator("SELECT a.id, a.titre, r.user_id IS NULL AS nonlu ++ FROM #groupex#.announces AS a ++ LEFT JOIN #groupex#.announces_read AS r ON (a.id = r.announce_id AND r.user_id = {?}) ++ WHERE asso_id = {?} AND peremption >= CURRENT_DATE() ++ AND (promo_min = 0 OR promo_min <= {?}) ++ AND (promo_max = 0 OR promo_max >= {?}) ++ ORDER BY a.peremption", S::i('uid'), $globals->asso('id'), S::i('promo'), S::i('promo')); $page->assign('article_index', $index); } else { - $arts = XDB::iterator("SELECT a.*, FIND_IN_SET('photo', a.flags) AS photo - FROM groupex.announces AS a - $arts = XDB::iterator("SELECT a.*, u.nom, u.prenom, u.promo, FIND_IN_SET('photo', a.flags) AS photo - FROM #groupex#.announces AS a - INNER JOIN #x4dat#.auth_user_md5 AS u USING(user_id) -- WHERE asso_id = {?} AND peremption >= CURRENT_DATE() - AND FIND_IN_SET('public', a.flags)", - AND FIND_IN_SET('public', u.flags)", ++ $arts = XDB::iterator("SELECT a.*, FIND_IN_SET('photo', a.flags) AS photo ++ FROM #groupex#.announces AS a ++ WHERE asso_id = {?} AND peremption >= CURRENT_DATE() ++ AND FIND_IN_SET('public', a.flags)", $globals->asso('id')); } if (may_update()) { @@@ -130,23 -181,17 +130,13 @@@ { global $globals; - $logo = $globals->asso('logo'); - if (!empty($logo)) { - header('Content-type: ' . $globals->asso('logo_mime')); - header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - header('Last-Modified:' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Cache-Control: no-cache, must-revalidate'); - header('Pragma: no-cache'); - echo $logo; - } else { - header('Content-type: image/jpeg'); - header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - header('Last-Modified:' . gmdate('D, d M Y H:i:s') . ' GMT'); - header('Cache-Control: no-cache, must-revalidate'); - header('Pragma: no-cache'); - readfile(dirname(__FILE__).'/../htdocs/images/dflt_carre.jpg'); - } - $res = XDB::query("SELECT logo, logo_mime - FROM #groupex#.asso WHERE id = {?}", ++ $res = XDB::query("SELECT logo, logo_mime ++ FROM #groupex#.asso ++ WHERE id = {?}", + $globals->asso('id')); + list($logo, $logo_mime) = $res->fetchOneRow(); + pl_cached_dynamic_content_headers(empty($logo) ? "image/jpeg" : $logo_mime); - if (!empty($logo)) { - echo $logo; - } else { - readfile(dirname(__FILE__) . '/../htdocs/images/dflt_carre.jpg'); - } exit; } @@@ -220,18 -267,13 +210,18 @@@ $flags, $globals->asso('id')); } + if ($_FILES['logo']['name']) { - $logo = file_get_contents($_FILES['logo']['tmp_name']); - $mime = $_FILES['logo']['type']; - XDB::execute('UPDATE #groupex#.asso - SET logo={?}, logo_mime={?} - WHERE id={?}', $logo, $mime, - $globals->asso('id')); + $upload = PlUpload::get($_FILES['logo'], $globals->asso('id'), 'asso.logo', true); + if (!$upload) { - $page->trigError("Impossible de télécharger le logo"); ++ $page->trigError("Impossible de télécharger le logo."); + } else { - XDB::execute('UPDATE groupex.asso - SET logo={?}, logo_mime={?} - WHERE id={?}', $upload->getContents(), $upload->contentType(), ++ XDB::execute('UPDATE #groupex#.asso ++ SET logo = {?}, logo_mime = {?} ++ WHERE id = {?}', $upload->getContents(), $upload->contentType(), + $globals->asso('id')); + $upload->rm(); + } } pl_redirect('../'.Post::v('diminutif', $globals->asso('diminutif')).'/edit'); @@@ -367,12 -482,24 +357,13 @@@ if (is_null($filename)) { $filename = $globals->asso('diminutif') . '.csv'; } - $ann = XDB::iterator( - "SELECT IF(m.origine='X',IF(u.nom_usage<>'', u.nom_usage, u.nom) ,m.nom) AS nom, - IF(m.origine='X',u.prenom,m.prenom) AS prenom, - IF(m.origine='X', u.promo, IF(m.origine='ext', 'extérieur', 'personne morale')) AS promo, - IF(m.origine='X' AND u.perms != 'pending',CONCAT(a.alias, '@', {?}), m.email) AS email, - IF(m.origine='X',FIND_IN_SET('femme', u.flags), m.sexe) AS femme, - m.comm as comm - FROM #groupex#.membres AS m - LEFT JOIN #x4dat#.auth_user_md5 AS u ON ( u.user_id = m.uid ) - LEFT JOIN #x4dat#.aliases AS a ON ( a.id = m.uid AND a.type = 'a_vie' ) - WHERE m.asso_id = {?} - AND (m.origine != 'X' OR u.perms != 'pending' OR m.email IS NOT NULL) - GROUP BY m.uid - ORDER BY nom, prenom", - $globals->mail->domain, $globals->asso('id')); + $users = $globals->asso()->getMembers(null, new UFO_Name('directory_name'))->getUsers(); + header('Content-Type: text/x-csv; charset=utf-8;'); + header('Pragma: '); + header('Cache-Control: '); + pl_content_headers("text/x-csv"); $page->changeTpl('xnetgrp/annuaire-csv.tpl', NO_SKIN); - $page->assign('ann', $ann); + $page->assign('users', $users); } private function removeSubscriptionRequest($uid) @@@ -546,11 -673,14 +537,11 @@@ } } - $it = XDB::iterator("SELECT IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom, - u.prenom, u.promo, u.hruid, s.ts AS date + $it = XDB::iterator('SELECT s.uid, a.hruid, s.ts AS date - FROM groupex.membres_sub_requests AS s - INNER JOIN accounts AS a ON(s.uid = a.uid) + FROM #groupex#.membres_sub_requests AS s - INNER JOIN #x4dat#.auth_user_md5 AS u ON (s.uid = u.user_id) - WHERE asso_id = {?} - ORDER BY nom, prenom", - $globals->asso('id')); - ++ INNER JOIN #x4dat#.accounts AS a ON(s.uid = a.uid) + WHERE s.asso_id = {?} + ORDER BY s.ts', $globals->asso('id')); $page->changeTpl('xnetgrp/subscribe-valid.tpl'); $page->assign('valid', $it); } @@@ -680,43 -819,44 +671,43 @@@ function handler_admin_member_new_ajax(&$page) { - header('Content-Type: text/html; charset="UTF-8"'); - $page->changeTpl('xnetgrp/membres-new-search.tpl', NO_SKIN); + pl_content_headers("text/html"); + $page->changeTpl('xnetgrp/membres-new-search.tpl', NO_SKIN); - $res = null; + $users = array(); if (Env::has('login')) { - require_once 'user.func.inc.php'; - $res = get_not_registered_user(Env::v('login'), true); + $user = User::getSilent(Env::t('login')); + if ($user && $user->state != 'pending') { + $users = array($user); + } } - if (is_null($res)) { - list($nom, $prenom) = str_replace(array('-', ' ', "'"), '%', array(Env::v('nom'), Env::v('prenom'))); - $where = "perms = 'pending'"; + if (empty($users)) { + list($nom, $prenom) = str_replace(array('-', ' ', "'"), '%', array(Env::t('nom'), Env::t('prenom'))); + $cond = new UFC_And(new UFC_Not(new UFC_Registered())); if (!empty($nom)) { - $where .= " AND nom LIKE '%$nom%'"; + $cond->addChild(new UFC_Name(UserFilter::LASTNAME, $nom, UFC_Name::CONTAINS)); } if (!empty($prenom)) { - $where .= " AND prenom LIKE '%$prenom%'"; + $cond->addChild(new UFC_Name(UserFilter::FIRSTNAME, $prenom, UFC_Name::CONTAINS)); } - if (preg_match('/^[0-9]{4}$/', Env::v('promo'))) { - $where .= " AND promo = " . Env::i('promo'); - } elseif (preg_match('/^[0-9]{2}$/', Env::v('promo'))) { - $where .= " AND MOD(promo, 100) = " . Env::i('promo'); - } elseif (Env::has('promo')) { - return; + if (Env::i('promo')) { + $cond->addChild(new UFC_Promo('=', UserFilter::GRADE_ING, Env::i('promo'))); + } + $uf = new UserFilter($cond); + $users = $uf->getUsers(30); + if ($uf->getTotalCount() > 30) { + $page->assign('too_many', true); + $users = array(); } - $res = XDB::iterator("SELECT user_id, nom, prenom, promo - FROM auth_user_md5 - WHERE $where"); - } - if ($res && $res->total() < 30) { - $page->assign("choix", $res); } + $page->assign('users', $users); } - function unsubscribe(&$user) + function unsubscribe(PlUser &$user) { global $globals; - XDB::execute("DELETE FROM groupex.membres - XDB::execute( - "DELETE FROM #groupex#.membres WHERE uid={?} AND asso_id={?}", - $user['uid'], $globals->asso('id')); ++ XDB::execute("DELETE FROM #groupex#.membres + WHERE uid = {?} AND asso_id = {?}", + $user->id(), $globals->asso('id')); if ($globals->asso('notif_unsub')) { $mailer = new PlMailer('xnetgrp/unsubscription-notif.mail.tpl'); @@@ -922,11 -1072,11 +913,11 @@@ } $perms = Post::i('is_admin'); - $comm = trim(Post::s('comm')); + $comm = Post::t('comm'); if ($user['perms'] != $perms || $user['comm'] != $comm) { - XDB::query('UPDATE groupex.membres - SET perms={?}, comm={?} - WHERE uid={?} AND asso_id={?}', + XDB::query('UPDATE #groupex#.membres + SET perms = {?}, comm = {?} + WHERE uid = {?} AND asso_id = {?}', $perms ? 'admin' : 'membre', $comm, $user['uid'], $globals->asso('id')); if ($perms != $user['perms']) { @@@ -1180,10 -1338,12 +1171,10 @@@ } if (empty($art) && !is_null($aid)) { - $res = XDB::query("SELECT a.*, FIND_IN_SET('public', a.flags) AS public, - $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 - FROM #groupex#.announces AS a - INNER JOIN #x4dat#.auth_user_md5 AS u USING(user_id) -- WHERE asso_id = {?} AND a.id = {?}", ++ $res = XDB::query("SELECT a.*, FIND_IN_SET('public', a.flags) AS public, ++ FIND_IN_SET('photo', a.flags) AS photo ++ FROM #groupex#.announces AS a ++ WHERE asso_id = {?} AND a.id = {?}", $globals->asso('id'), $aid); if ($res->numRows()) { $art = $res->fetchOneAssoc(); diff --cc modules/xnetgrp/feed.inc.php index d3f72b8,88ba32a..d7a30d3 --- a/modules/xnetgrp/feed.inc.php +++ b/modules/xnetgrp/feed.inc.php @@@ -74,20 -37,25 +74,20 @@@ class XnetGrpEventFeed extends PlFee { global $globals; if (!is_null($user)) { - return XDB::iterator("SELECT a.id, a.titre AS title, a.texte, a.contacts, - a.create_date AS publication, - CONCAT(u2.prenom, ' ', IF(u2.nom_usage != '', u2.nom_usage, u2.nom), ' (X', u2.promo, ')') AS author, - FIND_IN_SET('photo', a.flags) AS photo, - CONCAT({?}, '/#art', a.id) AS link - FROM #x4dat#.auth_user_md5 AS u - INNER JOIN #groupex#.announces AS a ON ((a.promo_min = 0 OR a.promo_min <= u.promo) - AND (a.promo_max = 0 OR a.promo_max <= u.promo)) - INNER JOIN #x4dat#.auth_user_md5 AS u2 ON (u2.user_id = a.user_id) - WHERE u.user_id = {?} AND peremption >= NOW() AND a.asso_id = {?}", - $this->link, $user->id(), $globals->asso('id')); + return new UserFilterIterator( + XDB::iterator("SELECT a.id, a.titre AS title, a.texte, a.contacts, + a.create_date AS publication, + FIND_IN_SET('photo', a.flags) AS photo, + CONCAT({?}, '/#art', a.id) AS link - FROM groupex.announces AS a ++ FROM #groupex#.announces AS a + WHERE peremption >= NOW() AND a.asso_id = {?}", + $this->link, $globals->asso('id'), $user)); } else { - return XDB::iterator("SELECT a.id, a.titre AS title, a.texte, a.create_date AS publication, - CONCAT(u.prenom, ' ', IF(u.nom_usage != '', u.nom_usage, u.nom), ' (X', u.promo, ')') AS author, - CONCAT({?}, '/#art', a.id) AS link, - NULL AS photo, NULL AS contacts - FROM #groupex#.announces AS a - INNER JOIN #x4dat#.auth_user_md5 AS u USING(user_id) - WHERE FIND_IN_SET('public', a.flags) AND peremption >= NOW() AND a.asso_id = {?}", + return XDB::iterator("SELECT a.id, a.titre AS title, a.texte, a.create_date AS publication, + CONCAT({?}, '/#art', a.id) AS link, + NULL AS photo, NULL AS contacts - FROM groupex.announces AS a ++ FROM #groupex#.announces AS a + WHERE FIND_IN_SET('public', a.flags) AND peremption >= NOW() AND a.asso_id = {?}", $this->link, $globals->asso('id')); } } diff --cc modules/xnetlists.php index d79dbe0,7176f09..b4e5987 --- a/modules/xnetlists.php +++ b/modules/xnetlists.php @@@ -221,14 -219,25 +221,15 @@@ class XnetListsModule extends ListsModu $not_in_group_x = array(); $not_in_group_ext = array(); - $ann = XDB::iterator( - "SELECT if (m.origine='X',if (u.nom_usage<>'', u.nom_usage, u.nom) ,m.nom) AS nom, - if (m.origine='X',u.prenom,m.prenom) AS prenom, - if (m.origine='X',u.promo,'extérieur') AS promo, - if (m.origine='X',CONCAT(a.alias, '@{$globals->mail->domain}'),m.email) AS email, - if (m.origine='X',FIND_IN_SET('femme', u.flags),0) AS femme, - m.perms='admin' AS admin, - m.origine='X' AS x - FROM #groupex#.membres AS m - LEFT JOIN #x4dat#.auth_user_md5 AS u ON ( u.user_id = m.uid ) - LEFT JOIN #x4dat#.aliases AS a ON ( a.id = m.uid AND a.type='a_vie' ) - WHERE m.asso_id = {?} - ORDER BY promo, nom, prenom", $globals->asso('id')); + $ann = XDB::fetchColumn('SELECT uid - FROM groupex.membres ++ FROM #groupex#.membres + WHERE asso_id = {?}', $globals->asso('id')); + $users = User::getBuildUsersWithUIDs($ann, 'promo,full_name'); + $not_in_list = array(); - - while ($tmp = $ann->next()) { - if (!in_array(strtolower($tmp['email']), $subscribers)) { - $not_in_list[] = $tmp; + foreach ($users as $user) { + if (!in_array(strtolower($user->forlifeEmail()), $subscribers)) { + $not_in_list[] = $user; } } @@@ -247,21 -256,37 +248,21 @@@ if (Env::has('add_member')) { S::assert_xsrf_token(); - $add = Env::v('add_member'); - if (strstr($add, '@')) { - list($mbox,$dom) = explode('@', strtolower($add)); - } else { - $mbox = $add; - $dom = 'm4x.org'; + $add = Env::t('add_member'); + $user = User::getSilent($add); + if ($user) { + $add = $user->forlifeEmail(); + } else if (!User::isForeignEmailAddress($add)) { + $add = null; } - if ($dom == 'polytechnique.org' || $dom == 'm4x.org') { - $res = XDB::query( - "SELECT a.alias, b.alias - FROM aliases AS a - LEFT JOIN aliases AS b ON (a.id=b.id AND b.type = 'a_vie') - WHERE a.alias={?} AND a.type!='homonyme'", $mbox); - if (list($alias, $blias) = $res->fetchOneRow()) { - $alias = empty($blias) ? $alias : $blias; - XDB::query( - "INSERT IGNORE INTO virtual_redirect (vid,redirect) - SELECT vid, {?} - FROM virtual - WHERE alias={?}", "$alias@m4x.org", $lfull); - $page->trigSuccess("$alias@m4x.org ajouté"); - } else { - $page->trigError("$mbox@{$globals->mail->domain} n'existe pas."); - } + if (!empty($add)) { - XDB::execute('INSERT INTO x4dat.virtual_redirect (vid, redirect) - SELECT vid, {?}, - FROM x4dat.virtual ++ XDB::execute('INSERT INTO virtual_redirect (vid, redirect) ++ SELECT vid, {?} ++ FROM virtual + WHERE alias = {?}', strtolower($add), $lfull); + $page->trigSuccess($add . ' ajouté.'); } else { - XDB::query( - "INSERT IGNORE INTO virtual_redirect (vid,redirect) - SELECT vid,{?} - FROM virtual - WHERE alias={?}", "$mbox@$dom", $lfull); - $page->trigSuccess("$mbox@$dom ajouté"); + $page->trigError($add . " n'existe pas."); } } diff --cc templates/admin/deces_promo.tpl index 64dee3a,b525a90..0c4441e --- a/templates/admin/deces_promo.tpl +++ b/templates/admin/deces_promo.tpl @@@ -60,20 -67,16 +58,16 @@@ - +{/if} {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}