Agora_Driver::getThreads PHP Method

getThreads() public method

Returns a list of threads.
public getThreads ( integer $thread_root, boolean $all_levels = false, string $sort_by = 'message_timestamp', integer $sort_dir, boolean $message_view = false, string $link_back = '', string $base_url = null, string $from = null, string $count = null, boolean $nofollow = false )
$thread_root integer Message at which to start the thread. If null get all forum threads
$all_levels boolean Show all child levels or just one level.
$sort_by string The column by which to sort.
$sort_dir integer The direction by which to sort: 0 - ascending 1 - descending
$message_view boolean
$link_back string A url to pass to the reply script which will be returned to after an insertion of a post. Useful in cases when this thread view is used in blocks to return to the original page rather than to Agora.
$base_url string An alternative URL where edit/delete links point to. Mainly for api usage. Takes "%p" as a placeholder for the parent message ID.
$from string The thread to start listing at.
$count string The number of threads to return.
$nofollow boolean Whether to set the 'rel="nofollow"' attribute on linked URLs in the messages.
    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;
    }