public function getThreads($thread_root = 0, $all_levels = false, $sort_by = 'message_timestamp', $sort_dir = 0, $message_view = false, $link_back = '', $base_url = null, $from = null, $count = null, $nofollow = false)
{
/* Check read permissions */
if (!$this->hasPermission(Horde_Perms::SHOW)) {
return PEAR::raiseError(sprintf(_("You don't have permission to read messages in forum %s."), $this->_forum_id));
}
/* Get messages data */
$messages = $this->_getThreads($thread_root, $all_levels, $sort_by, $sort_dir, $message_view, $from, $count);
if ($messages instanceof PEAR_Error || empty($messages)) {
return $messages;
}
/* Moderators */
if (isset($this->_forum['moderators'])) {
$moderators = array_flip($this->_forum['moderators']);
}
/* Set up the base urls for actions. */
$view_url = Horde::url('messages/index.php');
if ($base_url) {
$edit_url = $base_url;
$del_url = $base_url->copy()->add('delete', 'true');
} else {
$edit_url = Horde::url('messages/edit.php');
$del_url = Horde::url('messages/delete.php');
}
// Get needed prefs
$per_page = $GLOBALS['prefs']->getValue('thread_per_page');
$view_bodies = $GLOBALS['prefs']->getValue('thread_view_bodies');
$abuse_url = Horde::url('messages/abuse.php');
$hot_img = Horde::img('hot.png', _("Hot thread"), array('title' => _("Hot thread")));
$new_img = Horde::img('required.png', _("New posts"), array('title' => _("New posts")));
$is_moderator = $this->hasPermission(Horde_Perms::DELETE);
/* Loop through the threads and set up the array. */
foreach ($messages as &$message) {
/* Add attachment link */
if ($message['attachments']) {
$message['message_attachment'] = $this->getAttachmentLink($message['message_id']);
}
/* Get last message link */
if ($thread_root == 0 && $message['last_message_id'] > 0) {
$url = Agora::setAgoraId($message['forum_id'], $message['last_message_id'], $view_url, $this->_scope);
$message['message_url'] = Horde::link($url);
$last_timestamp = $message['last_message_timestamp'];
} else {
$last_timestamp = $message['message_timestamp'];
}
/* Check if thread is hot */
if ($this->isHot($message['view_count'], $last_timestamp)) {
$message['hot'] = $hot_img;
}
/* Check if has new posts since user last visit */
if ($thread_root == 0 && $this->isNew($message['message_id'], $last_timestamp)) {
$message['new'] = $new_img;
}
/* Mark moderators */
if (isset($this->_forum['moderators']) && array_key_exists($message['message_author'], $moderators)) {
$message['message_author_moderator'] = 1;
}
/* Link to view the message. */
$url = Agora::setAgoraId($message['forum_id'], $message['message_id'], $view_url, $this->_scope);
$message['link'] = Horde::link($url, $message['message_subject'], '', '', '', $message['message_subject']);
/* Set up indenting for threads. */
if ($sort_by != 'message_thread') {
unset($message['indent'], $message['parent']);
/* Links to pages */
if ($thread_root == 0 && $message['message_seq'] > $per_page && $view_bodies == 2) {
$sub_pages = $message['message_seq'] / $per_page;
for ($i = 0; $i < $sub_pages; $i++) {
$page_title = sprintf(_("Page %d"), $i + 1);
$message['pages'][] = Horde::link($url->add('thread_page', $i), $page_title, '', '', '', $page_title) . ($i + 1) . '</a>';
}
}
}
/* Button to post a reply to the message. */
if (!$message['locked']) {
if ($base_url) {
$url = $base_url;
if (strpos($url, '%p') !== false) {
$url = str_replace('%p', $message['message_id'], $url);
} else {
$url->add('message_parent_id', $message['message_id']);
}
if (!empty($link_back)) {
$url->add('url', $link_back);
}
} else {
$url = Agora::setAgoraId($message['forum_id'], $message['message_id'], $view_url, $this->_scope);
}
$url->add('reply_focus', 1) . '#messageform';
$message['reply'] = Horde::link($url, _("Reply to message"), '', '', '', _("Reply to message")) . _("Reply") . '</a>';
}
/* Link to edit the message. */
if ($thread_root > 0 && isset($this->_forum['moderators'])) {
$url = Agora::setAgoraId($message['forum_id'], $message['message_id'], $abuse_url);
$message['actions'][] = Horde::link($url, _("Report as abuse")) . _("Report as abuse") . '</a>';
}
if ($is_moderator) {
/* Link to edit the message. */
$url = Agora::setAgoraId($message['forum_id'], $message['message_id'], $edit_url, $this->_scope);
$message['actions'][] = Horde::link($url, _("Edit"), '', '', '', _("Edit message")) . _("Edit") . '</a>';
/* Link to delete the message. */
$url = Agora::setAgoraId($message['forum_id'], $message['message_id'], $del_url, $this->_scope);
$message['actions'][] = Horde::link($url, _("Delete"), '', '', '', _("Delete message")) . _("Delete") . '</a>';
/* Link to lock/unlock the message. */
$url = Agora::setAgoraId($this->_forum_id, $message['message_id'], Horde::url('messages/lock.php'), $this->_scope);
$label = $message['locked'] ? _("Unlock") : _("Lock");
$message['actions'][] = Horde::link($url, $label, '', '', '', $label) . $label . '</a>';
/* Link to move thread to another forum. */
if ($this->_scope == 'agora') {
if ($message['message_thread'] == $message['message_id']) {
$url = Agora::setAgoraId($this->_forum_id, $message['message_id'], Horde::url('messages/move.php'), $this->_scope);
$message['actions'][] = Horde::link($url, _("Move"), '', '', '', _("Move")) . _("Move") . '</a>';
/* Link to merge a message thred with anoter thread. */
$url = Agora::setAgoraId($this->_forum_id, $message['message_id'], Horde::url('messages/merge.php'), $this->_scope);
$message['actions'][] = Horde::link($url, _("Merge"), '', '', '', _("Merge")) . _("Merge") . '</a>';
} elseif ($message['message_thread'] != 0) {
/* Link to split thread to two threads, from this message after. */
$url = Agora::setAgoraId($this->_forum_id, $message['message_id'], Horde::url('messages/split.php'), $this->_scope);
$message['actions'][] = Horde::link($url, _("Split"), '', '', '', _("Split")) . _("Split") . '</a>';
}
}
}
}
return $messages;
}