public function updateModerator($moderator, $forum_id = null, $action = 'add')
{
if ($forum_id == null) {
$forum_id = $this->_forum_id;
}
switch ($action) {
case 'add':
$sql = 'INSERT INTO agora_moderators (forum_id, horde_uid) VALUES (?, ?)';
break;
case 'delete':
$sql = 'DELETE FROM agora_moderators WHERE forum_id = ? AND horde_uid = ?';
break;
}
try {
$this->_db->execute($sql, array($forum_id, $moderator));
} catch (Horde_Db_Exception $e) {
throw new Agora_Exception($e->getMessage());
}
/* Update permissions */
$perm_name = 'agora:forums:' . $this->_scope . ':' . $forum_id;
$perms = $GLOBALS['injector']->getInstance('Horde_Perms');
if (!$perms->exists($perm_name)) {
$forum_perm = $GLOBALS['injector']->getInstance('Horde_Core_Perms')->newPermission($perm_name);
$perms->addPermission($forum_perm);
} else {
$forum_perm = $perms->getPermission($perm_name);
if ($forum_perm instanceof PEAR_Error) {
return $forum_perm;
}
}
switch ($action) {
case 'add':
$forum_perm->addUserPermission($moderator, Horde_Perms::DELETE, true);
break;
case 'delete':
$forum_perm->removeUserPermission($moderator, Horde_Perms::DELETE, true);
break;
}
$this->_cache->expire('agora_forum_' . $forum_id, $GLOBALS['conf']['cache']['default_lifetime']);
}