Copyright 2007-2016 Horde LLC (http://www.horde.org/) See the enclosed file COPYING for license information (GPL). If you did not receive this file, see http://www.horde.org/licenses/gpl.
Author: Duck (duck@obala.net)
Inheritance: extends Horde_View
Example #1
0
 /**
  */
 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');
 }
Example #2
0
 /**
  */
 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');
 }
Example #3
0
/* 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();
Example #4
0
 /**
  * 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);
 }
Example #5
0
 /**
  */
 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');
 }
Example #6
0
$messages_list = $messages->getModerateList($sort_by, $sort_dir);
if ($messages_list instanceof PEAR_Error) {
    $notification->push($messages_list->getMessage(), 'horde.error');
    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');
}
Example #7
0
    }
    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();
Example #8
0
        $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();
Example #9
0
$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();
Example #10
0
$seen = $messages->logView($message['message_thread']);
/* Set thread page views */
if ($view_bodies == 2) {
    if ($thread_page === null && !$seen) {
        /* Jump to the last page, if we already seen the thread */
        $thread_page = max(ceil($thread_count / $prefs->getValue('thread_per_page')) - 1, 0);
    }
    $thread_per_page = $prefs->getValue('thread_per_page');
    $thread_start = $thread_page * $thread_per_page;
} else {
    $thread_page = 0;
    $thread_per_page = 0;
    $thread_start = 0;
}
/* Set up template */
$view = new Agora_View();
if (!$view_bodies) {
    /* Get the author's avatar. */
    if ($conf['avatar']['allow_avatars']) {
        $identity = $injector->getInstance('Horde_Core_Factory_Identity')->create($message['message_author']);
        $avatar_path = $identity->getValue('avatar_path');
        $message_author_avatar = Agora::validateAvatar($avatar_path) ? Agora::getAvatarUrl($avatar_path) : false;
        $view->message_author_avatar = $message_author_avatar;
    }
    $view->message_id = $message['message_id'];
    $view->message_author = sprintf(_("Posted by %s on %s"), htmlspecialchars($message['message_author']), $messages->dateFormat($message['message_timestamp']));
    if (isset($message['message_author_moderator'])) {
        $view->message_author_moderator = 1;
    }
    $view->message_subject = $message['message_subject'];
    $view->message_body = Agora_Driver::formatBody($message['body']);
Example #11
0
/* Get a list of threads. */
$threads_list = $threads->getThreads(0, false, $sort_by, $sort_dir, false, '', null, $thread_start, $threads_per_page);
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'])));
Example #12
0
        $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();
Example #13
0
    $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();
Example #14
0
File: ban.php Project: horde/horde
    }
    $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();
Example #15
0
 * Copyright 2005-2015 Horde LLC (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (GPL). If you
 * did not receive this file, see http://www.horde.org/licenses/gpl.
 *
 * @author  Jason Felice <*****@*****.**>
 */
require_once __DIR__ . '/lib/Application.php';
Horde_Registry::appInit('agora');
/* Set up the forums object. */
$scope = Horde_Util::getGet('scope', 'agora');
$messages = $injector->getInstance('Agora_Factory_Driver')->create($scope);
$vars = Horde_Variables::getDefaultVariables();
$form = new Agora_Form_Search($vars, $scope);
$thread_page = Horde_Util::getFormData('thread_page');
$view = new Agora_View();
if ($form->isSubmitted() || $thread_page != null) {
    $form->getInfo($vars, $info);
    if (!empty($info['keywords'])) {
        $info['keywords'] = preg_split('/\\s+/', $info['keywords']);
    }
    $sort_by = Agora::getSortBy('thread');
    $sort_dir = Agora::getSortDir('thread');
    $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'])) {