INNER JOIN groupex.membres AS m ON m.asso_id = a.id
WHERE m.uid={?}", S::v('uid'));
$links = '<a href="exit">déconnexion</a>';
- if (S::has('suid')) {
- $links = '<a href="exit">reprendre les droits d\'admin</a>';
- } elseif (S::has_perms()) {
- $links = '<a href="get_rights/user">perdre les droits d\'admin</a>|' . $links;
- }
$html = '<div>Mes groupes (' . $links . ') :</div>';
while (list($nom, $mini) = $res->next()) {
$html .= "<span class='gp'>• <a href='login/$mini'>$nom</a></span>";
// }}}
}
+// {{{ doSelfSuid
+
+function doSelfSuid()
+{
+ if (!S::has('suid')) {
+ $_SESSION['suid'] = $_SESSION;
+ }
+ $_SESSION['perms'] = 'user';
+}
+
+// }}}
+// {{{ killSuid
+
+function killSuid()
+{
+ if (!S::has('suid')) {
+ return;
+ }
+ $suid = S::v('suid');
+ S::kill('suid');
+ S::kill('may_update');
+ S::kill('is_member');
+ $_SESSION['perms'] = $suid['perms'];
+}
+
+// }}}
// {{{ may_update
-function may_update() {
+function may_update($force = false, $lose = false)
+{
+ if (!isset($_SESSION['may_update'])) {
+ $_SESSION['may_update'] = array();
+ }
+ $may_update =& $_SESSION['may_update'];
+
global $globals;
- if (!$globals->asso('id')) { return false; }
- if (S::has_perms()) { return true; }
- $res = XDB::query(
- "SELECT perms
- FROM groupex.membres
- WHERE uid={?} AND asso_id={?}", S::v('uid'), $globals->asso('id'));
- return $res->fetchOneCell() == 'admin';
+ $asso_id = $globals->asso('id');
+ if (!$asso_id) { return false; }
+ if (S::has_perms() && !$lose) { return true; }
+ if ((!isset($may_update[$asso_id]) || $force) && !$lose) {
+ $res = XDB::query("SELECT perms
+ FROM groupex.membres
+ WHERE uid={?} AND asso_id={?}",
+ S::v('uid'), $globals->asso('id'));
+ $may_update[$asso_id] = ($res->fetchOneCell() == 'admin');
+ } elseif ($lose) {
+ $may_update[$asso_id] = false;
+ }
+ return $may_update[$asso_id];
}
// }}}
// {{{ is_member
-function is_member($force = false)
+function is_member($force = false, $lose = false)
{
+ if (!isset($_SESSION['is_member'])) {
+ $_SESSION['is_member'] = array();
+ }
+ $is_member =& $_SESSION['is_member'];
+
global $globals;
$asso_id = $globals->asso('id');
if (!$asso_id) { return false; }
- static $is_member;
- if (!$is_member) $is_member = array();
- if (!isset($is_member[$asso_id]) || $force)
- {
+ if ((!isset($is_member[$asso_id]) || $force) && !$lose) {
$res = XDB::query(
"SELECT COUNT(*)
FROM groupex.membres
WHERE uid={?} AND asso_id={?}",
S::v('uid'), $asso_id);
$is_member[$asso_id] = $res->fetchOneCell() == 1;
+ } elseif ($lose) {
+ $is_member[$asso_id] = false;
}
return $is_member[$asso_id];
}
function handler_exit(&$page)
{
if (S::has('suid')) {
- $suid = S::v('suid');
- $_SESSION['perms'] = $suid['perms'];
- S::kill('suid');
- } else {
- XnetSession::destroy();
- $page->changeTpl('xnet/deconnexion.tpl');
+ killSuid();
}
- pl_redirect('/');
+ XnetSession::destroy();
+ $page->changeTpl('xnet/deconnexion.tpl');
}
function handler_admin(&$page)
'%grp/subscribe' => $this->make_hook('subscribe', AUTH_MDP),
'%grp/unsubscribe' => $this->make_hook('unsubscribe', AUTH_MDP),
+ '%grp/change_rights' => $this->make_hook('change_rights', AUTH_MDP),
+
'%grp/admin/annuaire'
=> $this->make_hook('admin_annuaire', AUTH_MDP),
}
}
+ function handler_change_rights(&$page)
+ {
+ if (Env::has('right') && (may_update() || S::has('suid'))) {
+ switch (Env::v('right')) {
+ case 'admin':
+ killSuid();
+ break;
+ case 'anim':
+ doSelfSuid();
+ may_update(true);
+ is_member(true);
+ break;
+ case 'member':
+ doSelfSuid();
+ may_update(false, true);
+ is_member(true);
+ break;
+ case 'logged':
+ doSelfSuid();
+ may_update(false, true);
+ is_member(false, true);
+ break;
+ }
+ }
+ pl_redirect("");
+ }
+
function handler_admin_annuaire(&$page)
{
global $globals;