public function moderate($action, $ids)
{
switch ($action) {
case 'approve':
/* Get message thread to expire cache */
$sql = 'SELECT message_thread FROM ' . $this->_threads_table . ' WHERE message_id IN (' . implode(',', $ids) . ')';
try {
$threads = $this->_db->selectValues($sql);
} catch (Horde_Db_Exception $e) {
throw new Agora_Exception($e->getMessage());
}
$this->_updateCacheState($threads);
$sql = 'UPDATE ' . $this->_threads_table . ' SET approved = 1' . ' WHERE message_id IN (' . implode(',', $ids) . ')';
try {
$this->_db->execute($sql);
} catch (Horde_Db_Exception $e) {
throw new Agora_Exception($e->getMessage());
}
/* Save original forum_id for later resetting */
$orig_forum_id = $this->_forum_id;
foreach ($ids as $message_id) {
/* Update cached message and thread counts */
$message = $this->getMessage($message_id);
$this->_forum_id = $message['forum_id'];
/* Update cached last poster */
$this->_lastInForum($this->_forum_id);
$this->_forumSequence($this->_forum_id, 'message', '+');
if (!empty($message['parents'])) {
$this->_sequence($message['message_thread'], '+');
$this->_lastInThread($message['message_thread'], $message_id, $message['message_author'], $_SERVER['REQUEST_TIME']);
} else {
$this->_forumSequence($this->_forum_id, 'thread', '+');
}
/* Send the new post to the distribution address */
Agora::distribute($message_id);
}
/* Restore original forum ID */
$this->_forum_id = $orig_forum_id;
break;
case 'delete':
foreach ($ids as $id) {
$this->deleteMessage($id);
}
break;
}
}