/** */ protected function _content() { /* Return empty if we don't have a thread set. */ if (empty($this->_params['thread_id'])) { return ''; } /* Set up the message object. */ list($forum_id, $message_id) = explode('.', $this->_params['thread_id']); $messages = $GLOBALS['injector']->getInstance('Agora_Factory_Driver')->create('agora', $forum_id); /* Check if valid thread, otherwise show forum list. */ if ($messages instanceof PEAR_Error || empty($messages)) { throw new Horde_Exception(_("Unable to fetch selected thread.")); } /* Get the sorting. */ $sort_by = Agora::getSortBy('threads'); $sort_dir = Agora::getSortDir('threads'); $view_bodies = $GLOBALS['prefs']->getValue('thread_view_bodies'); /* Get the message array and the sorted thread list. */ $threads_list = $messages->getThreads($messages->getThreadRoot($message_id), true, $sort_by, $sort_dir, $view_bodies, Horde::selfUrl()); /* Set up the column headers. */ $col_headers = array(array('message_thread' => _("Thread"), 'message_subject' => _("Subject")), 'message_author' => _("Posted by"), 'message_timestamp' => _("Date")); $col_headers = Agora::formatColumnHeaders($col_headers, $sort_by, $sort_dir, 'threads'); /* Set up the template tags. */ $view = new Agora_View(); $view->col_headers = $col_headers; $view->threads_list = $threads_list; $view->threads_list_header = _("Thread List"); $view->thread_view_bodies = $view_bodies; return $view->render('block/thread'); }
/** */ protected function _content() { global $registry; /* Set up the forums object. */ $forums = array($GLOBALS['injector']->getInstance('Agora_Factory_Driver')->create()); if ($GLOBALS['registry']->isAdmin()) { foreach ($registry->listApps(array('hidden', 'notoolbar', 'active')) as $scope) { if ($registry->hasMethod('hasComments', $scope) && $registry->callByPackage($scope, 'hasComments') === true) { $forums[] = $GLOBALS['injector']->getInstance('Agora_Factory_Driver')->create($scope); } } } /* Get the sorting. */ $sort_by = Agora::getSortBy('forums'); $sort_dir = Agora::getSortDir('forums'); /* Get the list of forums. */ $forums_list = array(); foreach ($forums as $forum) { try { $scope_forums = $forum->getForums(0, true, $sort_by, $sort_dir, true); $forums_list = array_merge($forums_list, $scope_forums); } catch (Agora_Exception $e) { return $e->getMessage(); /* Catch NotFound exception here so it won't break the cycle. */ } catch (Horde_Exception_NotFound $e) { } } /* Show a message if no available forums. Don't raise an error * as it is not an error to have no forums. */ if (empty($forums_list)) { return _("There are no forums."); } /* Display only the most recent threads if preference set. */ if (!empty($this->_params['forum_display'])) { $forums_list = array_slice($forums_list, 0, $this->_params['forum_display']); } /* Set up the column headers. */ $col_headers = array('forum_name' => _("Forum"), 'message_count' => _("Posts"), 'message_subject' => _("Last Post"), 'message_author' => _("Posted by"), 'message_timestamp' => _("Date")); $col_headers = Agora::formatColumnHeaders($col_headers, $sort_by, $sort_dir, 'forums'); /* Set up the template tags. */ $view = new Agora_View(); $view->col_headers = $col_headers; $view->forums_list = $forums_list; return $view->render('block/forums'); }
/* Which forums page are we on? Default to page 0. */ $forum_page = Horde_Util::getFormData('forum_page', 0); $forums_per_page = $prefs->getValue('forums_per_page'); $forum_start = $forum_page * $forums_per_page; /* Get the list of forums. */ try { $forums_list = $forums->getForums(0, true, $sort_by, $sort_dir, true, $forum_start, $forums_per_page); $forums_count = $forums->countForums(); } catch (Horde_Exception_NotFound $e) { $forums_count = 0; } /* Set up the column headers. */ $col_headers = array('forum_name' => _("Forum"), 'forum_description' => _("Description"), 'message_count' => _("Posts"), 'thread_count' => _("Threads"), 'message_timestamp' => _("Last Post"), 'message_author' => _("Posted by"), 'message_date' => _("Date")); $col_headers = Agora::formatColumnHeaders($col_headers, $sort_by, $sort_dir, 'forums'); /* Set up the template tags. */ $view = new Agora_View(); $view->col_headers = $col_headers; $view->forums_list = $forums_list; Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); $view->actions = empty($actions) ? null : $actions; /* Set up pager. */ $vars = Horde_Variables::getDefaultVariables(); $pager_ob = new Horde_Core_Ui_Pager('forum_page', $vars, array('num' => $forums_count, 'url' => 'forums.php', 'perpage' => $forums_per_page)); $pager_ob->preserve('scope', $scope); $view->pager_link = $pager_ob->render(); $page_output->addLinkTag(array('href' => Horde::url('rss/index.php', true, -1)->add('scope', $scope), 'title' => _("Forums"))); $page_output->header(array('title' => _("All Forums"))); echo $view->render('forums'); $page_output->footer();
/** * Returns a table showing the specified message list. * * @param array $threads A hash with the thread messages as * returned by {@link * Agora_Driver::getThreads}. * @param array $col_headers A hash with the column headers. * @param boolean $bodies Display the message bodies? * @param string $template_file Template to use. * * @return string The rendered message table. */ public function getThreadsUi($threads, $col_headers, $bodies = false, $template_file = false) { if (!count($threads)) { return ''; } /* Render threaded lists with Horde_Tree. */ if (!$template_file && isset($threads[0]['indent'])) { $tree = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Tree')->create('threads', 'Html', array('multiline' => $bodies, 'lines' => !$bodies)); $tree->setHeader(array(array('class' => $col_headers['message_thread_class_plain'], 'html' => '<strong>' . $col_headers['message_thread'] . '</strong>'), array('class' => $col_headers['message_author_class_plain'], 'html' => '<strong>' . $col_headers['message_author'] . '</strong>'), array('class' => $col_headers['message_timestamp_class_plain'], 'html' => '<strong>' . $col_headers['message_timestamp'] . '</strong>'))); foreach ($threads as &$thread) { if ($bodies) { $text = '<strong>' . $thread['message_subject'] . '</strong><small>['; if (isset($thread['reply'])) { $text .= ' ' . $thread['reply']; } if (!empty($thread['actions'])) { $text .= ', ' . implode(', ', $thread['actions']); } $text .= ']</small><br />' . str_replace(array("\r", "\n"), '', $thread['body'] . (isset($thread['message_attachment']) ? $thread['message_attachment'] : '')); } else { $text = '<strong>' . $thread['link'] . $thread['message_subject'] . '</a></strong> '; if (isset($thread['actions'])) { $text .= '<small>[' . implode(', ', $thread['actions']) . ']</small>'; } } $tree->addNode(array('id' => $thread['message_id'], 'parent' => $thread['parent'], 'label' => $text, 'params' => array('class' => 'linedRow', 'icon' => false), 'right' => array($thread['message_author'], $thread['message_date']))); } return $tree->getTree(true); } /* Set up the thread template tags. */ $view = new Agora_View(); $view->threads_list = $threads; $view->col_headers = $col_headers; $view->thread_view_bodies = $bodies; /* Render template. */ if (!$template_file) { $template_file = 'messages/threads'; } return $view->render($template_file); }
/** */ protected function _content() { if (!isset($this->_params['forum_id'])) { throw new Horde_Exception(_("No forum selected")); } if (empty($this->_threads)) { $this->_threads = $GLOBALS['injector']->getInstance('Agora_Factory_Driver')->create('agora', $this->_params['forum_id']); if ($this->_threads instanceof PEAR_Error) { throw new Horde_Exception(_("Unable to fetch threads for selected forum.")); } } /* Get the sorting. */ $sort_by = Agora::getSortBy('threads'); $sort_dir = Agora::getSortDir('threads'); /* Get a list of threads and display only the most recent if * preference is set. */ $threads_list = $this->_threads->getThreads(0, false, $sort_by, $sort_dir, false, Horde::selfUrl(), null, 0, !empty($this->_params['thread_display']) ? $this->_params['thread_display'] : null); /* Show a message if no available threads. Don't raise an error * as it is not an error to have no threads. */ if (empty($threads_list)) { return _("No available threads."); } /* Set up the column headers. */ $col_headers = array('message_subject' => _("Subject"), 'message_author' => _("Posted by"), 'message_timestamp' => _("Date")); $col_headers = Agora::formatColumnHeaders($col_headers, $sort_by, $sort_dir, 'threads'); /* Set up the template tags. */ $view = new Agora_View(); $view->col_headers = $col_headers; $view->threads = $threads_list; return $view->render('block/threads'); }
Horde::url('forums.php', true)->redirect(); } elseif (empty($messages_list)) { $messages_count = 0; $notification->push(_("No messages are waiting for moderation."), 'horde.message'); } else { $messages_count = count($messages_list); $messages_list = array_slice($messages_list, $messages_start, $messages_per_page); } /* Set up the column headers. */ $col_headers = array('forum_id' => _("Forum"), 'message_subject' => _("Subject"), 'message_author' => _("Posted by"), 'message_body' => _("Body"), 'message_timestamp' => _("Date")); $col_headers = Agora::formatColumnHeaders($col_headers, $sort_by, $sort_dir, 'moderate'); /* Set up the template tags. */ $view = new Agora_View(); $view->col_headers = $col_headers; $view->messages = $messages_list; $view->buttons = array(_("Approve"), _("Delete")); $view->session_tag = Horde_Util::formInput(); Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); /* Set up pager. */ $vars = Horde_Variables::getDefaultVariables(); $pager_ob = new Horde_Core_Ui_Pager('moderate_page', $vars, array('num' => $messages_count, 'url' => Horde::selfUrl(true), 'perpage' => $messages_per_page)); $pager_ob->preserve('agora', Horde_Util::getFormData('agora')); $view->pager = $pager_ob->render(); if (isset($api_call)) { return $view->render('moderate'); } $page_output->header(array('title' => _("Messages Awaiting Moderation"))); echo $view->render('moderate'); $page_output->footer();
} foreach ($forum['moderators'] as $id => $moderator) { $delete = $url->add(array('moderator' => $moderator, 'forum_id' => $forum['forum_id'])); $forums_list[$key]['moderators'][$id] = Horde::link($delete, _("Delete")) . $moderator . '</a>'; } } $title = _("Moderators"); $vars = Horde_Variables::getDefaultVariables(); $form = new Horde_Form($vars, $title); $form->addHidden('', 'scope', 'text', false); $form->addHidden('', 'action', 'text', false); $vars->set('action', 'add'); $form->addVariable(_("Moderator"), 'moderator', 'text', true); if ($messages->countForums() > 50) { $form->addVariable(_("Forum"), 'forum_id', 'int', true); } else { $forums_enum = Agora::formatCategoryTree($messages->getForums(0, false, 'forum_name', 0, !$registry->isAdmin())); $form->addVariable(_("Forum"), 'forum_id', 'enum', true, false, false, array($forums_enum)); } /* Set up template data. */ $view = new Agora_View(); Horde::startBuffer(); $form->renderActive(null, null, Horde::url('moderators.php'), 'post'); $view->formbox = Horde::endBuffer(); Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); $view->forums = $forums_list; $page_output->header(array('title' => $title)); echo $view->render('moderators'); $page_output->footer();
$forums = $injector->getInstance('Agora_Factory_Driver')->create($scope); $threads = $forums->getThreadsByForumOwner($owner, 0, false, $sort_by, $sort_dir, false, 0, 5); echo '<h1 class="header">' . $scope_name . '</h1>'; if ($threads instanceof PEAR_Error) { echo $threads->getMessage(); } elseif (empty($threads)) { echo _("No threads"); } else { $link_back = $registry->hasMethod('show', $scope); $url = Horde::url('agora/messages/index.php'); /* link threads if possible */ foreach ($threads as &$thread) { if ($link_back) { $thread['link'] = Horde::link($registry->linkByPackage($scope, 'show', array('id' => $thread['forum_name']))); } else { $thread['link'] = Horde::link(Agora::setAgoraId($thread['forum_id'], $thread['message_id'], $url, $scope, false)); } } /* Set up the column headers. */ $col_headers = array('message_subject' => _("Subject"), 'message_author' => _("Posted by"), 'message_timestamp' => _("Date")); $col_headers = Agora::formatColumnHeaders($col_headers, $sort_by, $sort_dir, 'threads'); /* Set up the template tags. */ $view = new Agora_View(); $view->col_headers = $col_headers; $view->threads = $threads; echo $view->render('block/threads'); } echo '<br />'; } } $page_output->footer();
$form->setButtons(array(_("Move"), _("Cancel"))); $form->addHidden('', 'agora', 'text', false); $form->addHidden('', 'scope', 'text', false); $forums_list = Agora::formatCategoryTree($messages->getForums(0, false)); $v =& $form->addVariable(_("Forum"), 'new_forum_id', 'enum', true, false, null, array($forums_list)); $v->setDefault($forum_id); /* Validate the form. */ if ($form->validate()) { $form->getInfo($vars, $info); if ($vars->get('submitbutton') == _("Move")) { $move = $messages->moveThread($message_id, $info['new_forum_id']); if ($move instanceof PEAR_Error) { $notification->push($move->getMessage(), 'horde.error'); } else { $notification->push(sprintf(_("Thread %s moved to from forum %s to %s."), $message_id, $forum_id, $info['new_forum_id']), 'horde.success'); header('Location: ' . Agora::setAgoraId($info['new_forum_id'], $message_id, Horde::url('messages/index.php', true), $scope)); exit; } } } /* Template object. */ $view = new Agora_View(); Horde::startBuffer(); $form->renderActive(null, $vars, Horde::url('messages/move.php'), 'post'); $view->formbox = Horde::endBuffer(); $view->message_subject = $message['message_subject']; $view->message_author = $message['message_author']; $view->message_body = Agora_Driver::formatBody($message['body']); $page_output->header(); echo $view->render('messages/edit'); $page_output->footer();
$threads = $messages->getThreadsUi($threads_list, $col_headers, $view_bodies, $threads_template); break; } /* Set up the main template tags. */ Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); $view->actions = $actions; $view->threads = $threads; $view->rss = Horde::url('rss/messages.php', true, -1)->add(array('scope' => $scope, 'message_id' => $message_id, 'forum_id' => $forum_id)); /* Display an edit-dialogue if the thread is not locked and we can edit messages in them. */ if (!$messages->hasPermission(Horde_Perms::EDIT)) { Horde::permissionDeniedError('agora', null); $view->form = sprintf(_("You don't have permission to post messages in forum %s."), $forum['forum_name']); } elseif ($message['locked']) { $view->form = _("Thread locked."); } else { $reply = $messages->replyMessage($message); $vars = Horde_Variables::getDefaultVariables(); $vars->set('forum_id', $forum_id); $vars->set('message_parent_id', $message_id); $vars->set('message_subject', $reply['message_subject']); $vars->set('message_body_old', $reply['body']); $form = $messages->getForm($vars, sprintf(_("Post a Reply to \"%s\""), $reply['message_subject'])); Horde::startBuffer(); $form->renderActive(null, null, Horde::url('messages/edit.php'), 'post', null, false); $view->form = Horde::endBuffer(); } $page_output->header(); echo $view->render($template_file); $page_output->footer();
if ($threads_list instanceof PEAR_Error) { $notification->push($threads_list->getMessage(), 'horde.error'); Horde::url('forums.php', true)->redirect(); } if (empty($threads_list)) { $threads_count = 0; } else { $threads_count = $threads->_forum['thread_count']; } /* Set up the column headers. */ $col_headers = array('message_subject' => _("Subject"), 'message_seq' => _("Posts"), 'view_count' => _("Views"), 'message_author' => _("Started"), 'message_modifystamp' => _("Last post")); $col_headers = Agora::formatColumnHeaders($col_headers, $sort_by, $sort_dir, 'threads'); /* Set up the template tags. */ $view = new Agora_View(); $view->col_headers = $col_headers; $view->threads = $threads_list; $view->forum_name = sprintf(_("Threads in %s"), $forum_array['forum_name']); $view->forum_description = Agora_Driver::formatBody($forum_array['forum_description']); $view->actions = $threads->getThreadActions(); Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); $view->rss = Horde::url('rss/threads.php', true, -1)->add(array('scope' => $scope, 'forum_id' => $forum_id)); /* Set up pager. */ $vars = Horde_Variables::getDefaultVariables(); $pager_ob = new Horde_Core_Ui_Pager('thread_page', $vars, array('num' => $threads_count, 'url' => 'threads.php', 'perpage' => $threads_per_page)); $pager_ob->preserve('agora', Horde_Util::getFormData('agora')); $view->pager_link = $pager_ob->render(); $page_output->header(array('title' => sprintf(_("Threads in %s"), $forum_array['forum_name']))); echo $view->render('threads'); $page_output->footer();
$identity = $injector->getInstance('Horde_Core_Factory_Identity')->create($moderator); $address = $identity->getValue('from_addr'); if (!empty($address)) { $emails[] = $address; } } if (empty($emails)) { header('Location: ' . $url); exit; } $mail = new Horde_Mime_Mail(array('body' => $url . "\n\n" . $registry->getAuth() . "\n\n" . $_SERVER["REMOTE_ADDR"], 'Subject' => sprintf(_("Message %s reported as abuse"), $message_id), 'To' => $emails, 'From' => $emails[0], 'User-Agent' => 'Agora ' . $registry->getVersion())); $mail->send($injector->getInstance('Horde_Mail')); $notification->push($subject, 'horde.success'); header('Location: ' . $url); exit; } /* Set up template data. */ $view = new Agora_View(); Horde::startBuffer(); $form->renderActive(null, $vars, Horde::url('messages/abuse.php'), 'post'); $view->formbox = Horde::endBuffer(); Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); $view->message_subject = $message['message_subject']; $view->message_author = $message['message_author']; $view->message_date = strftime($prefs->getValue('date_format'), $message['message_timestamp']); $view->message_body = Agora_Driver::formatBody($message['body']); $page_output->header(); echo $view->render('messages/form'); $page_output->footer();
$message_list = array(); foreach ($messages->getThreads($vars->get('new_thread_id'), true) as $thread) { $message_list[$thread['message_id']] = $thread['message_subject'] . ' (' . $thread['message_author'] . ' ' . $thread['message_date'] . ')'; } $form->addVariable(_("After Message: "), 'after_message_id', 'enum', true, false, null, array($message_list)); } /* Validate the form. */ if ($form->validate()) { $form->getInfo($vars, $info); if ($vars->get('submitbutton') == _("Merge")) { $merge = $messages->mergeThread($message_id, $info['after_message_id']); if ($merge instanceof PEAR_Error) { $notification->push($merge->getMessage(), 'horde.error'); } else { $notification->push(sprintf(_("Thread %s merged with thread %s after message %s."), $message_id, $info['new_thread_id'], $info['after_message_id']), 'horde.error'); header('Location: ' . Agora::setAgoraId($forum_id, $info['new_thread_id'], Horde::url('messages/index.php', true), $scope)); exit; } } } /* Template object. */ $view = new Agora_View(); Horde::startBuffer(); $form->renderActive(null, $vars, Horde::url('messages/merge.php'), 'post'); $view->main = Horde::endBuffer(); $view->message_subject = $message['message_subject']; $view->message_author = $message['message_author']; $view->message_body = Agora_Driver::formatBody($message['body']); $page_output->header(); echo $view->render('main'); $page_output->footer();
} $url = Agora::setAgoraId($forum_id, null, Horde::url('ban.php', true), $scope); header('Location: ' . $url); exit; } /* Get the list of banned users. */ $delete = Horde::url('ban.php')->add(array('action' => 'delete', 'scope' => $scope, 'forum_id' => $forum_id)); $banned = $forums->getBanned(); foreach ($banned as $user => $level) { $banned[$user] = Horde::link($delete->add('user', $user), _("Delete")) . $user . '</a>'; } $title = _("Ban"); $vars = Horde_Variables::getDefaultVariables(); $form = new Horde_Form($vars, $title); $form->addHidden('', 'scope', 'text', false); $form->addHidden('', 'agora', 'text', false); $form->addHidden('', 'action', 'text', false); $vars->set('action', 'add'); $form->addVariable(_("User"), 'user', 'text', true); $view = new Agora_View(); Horde::startBuffer(); $form->renderActive(null, null, Horde::url('ban.php'), 'post'); $view->formbox = Horde::endBuffer(); Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); $view->banned = $banned; $view->forum = $forums->getForum(); $page_output->header(array('title' => $title)); echo $view->render('ban'); $page_output->footer();
$thread_per_page = $prefs->getValue('thread_per_page'); $thread_start = $thread_page * $thread_per_page; $searchResults = $messages->search($info, $sort_by, $sort_dir, $thread_start, $thread_per_page); if ($searchResults instanceof PEAR_Error) { $notification->push($searchResults->getMessage(), 'horde.error'); Horde::url('search.php')->redirect(); } if ($searchResults['total'] > count($searchResults['results'])) { $pager_ob = new Horde_Core_Ui_Pager('thread_page', $vars, array('num' => $searchResults['total'], 'url' => 'search.php', 'perpage' => $thread_per_page)); foreach ($info as $key => $val) { if ($val) { if ($key == 'keywords') { $val = implode(' ', $val); } $pager_ob->preserve($key, $val); } } $view->pager_link = $pager_ob->render(); } $view->searchTotal = number_format($searchResults['total']); $view->searchResults = $searchResults['results']; } Horde::startBuffer(); $notification->notify(array('listeners' => 'status')); $view->notify = Horde::endBuffer(); Horde::startBuffer(); $form->renderActive(null, $vars, Horde::url('search.php'), 'get'); $view->searchForm = Horde::endBuffer(); $page_output->header(array('title' => _("Search Forums"))); echo $view->render('search'); $page_output->footer();