Your IP : 216.73.216.172


Current Path : /var/www/html/components/com_kunena/src/Controller/Topic/Form/History/
Upload File :
Current File : /var/www/html/components/com_kunena/src/Controller/Topic/Form/History/TopicFormHistoryDisplay.php

<?php

/**
 * Kunena Component
 *
 * @package         Kunena.Site
 * @subpackage      Controller.Topic
 *
 * @copyright       Copyright (C) 2008 - 2026 Kunena Team. All rights reserved.
 * @license         https://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link            https://www.kunena.org
 **/

namespace Kunena\Forum\Site\Controller\Topic\Form\History;

\defined('_JEXEC') or die();

use Exception;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Registry\Registry;
use Kunena\Forum\Libraries\Attachment\KunenaAttachmentHelper;
use Kunena\Forum\Libraries\Controller\KunenaControllerDisplay;
use Kunena\Forum\Libraries\Event\KunenaPrepareEvent;
use Kunena\Forum\Libraries\Forum\Message\KunenaMessageHelper;
use Kunena\Forum\Libraries\Forum\Topic\KunenaTopicHelper;
use Kunena\Forum\Libraries\KunenaPrivate\Message\KunenaPrivateMessageFinder;
use Kunena\Forum\Libraries\User\KunenaUserHelper;

/**
 * Class ComponentTopicControllerFormHistoryDisplay
 *
 * TODO: merge to another controller...
 *
 * @since   Kunena 4.0
 */
class TopicFormHistoryDisplay extends KunenaControllerDisplay
{
    /**
     * @var     string
     * @since   Kunena 6.0
     */
    protected $name = 'Topic/Edit/History';

    public $topic;

    public $history;

    public $replycount;

    public $historycount;

    public $attachments;

    public $inline_attachments;

    /**
     * Prepare reply history display.
     *
     * @return  void
     *
     * @throws  Exception
     * @since   Kunena 6.0
     */
    protected function before()
    {
        parent::before();

        $id = $this->input->getInt('id');
        $me = KunenaUserHelper::getMyself();

        $this->topic   = KunenaTopicHelper::get($id);
        $category      = $this->topic->getCategory();
        $this->history = KunenaMessageHelper::getMessagesByTopic(
            $this->topic,
            0,
            (int) $this->config->historyLimit,
            'DESC'
        );

        $this->replycount   = $this->topic->getReplies();
        $this->historycount = \count($this->history);
        KunenaAttachmentHelper::getByMessage($this->history);
        $userlist = [];
        $messages = [];

        foreach ($this->history as $message) {
            $messages[$message->id]           = $message;
            $userlist[(int) $message->userid] = (int) $message->userid;
        }

        if ($me->exists()) {
            $pmFinder = new KunenaPrivateMessageFinder();
            $pmFinder->filterByMessageIds(array_keys($messages))->order('id');

            if (!$me->isModerator($category)) {
                $pmFinder->filterByUser($me);
            }

            $pms = $pmFinder->find();

            foreach ($pms as $pm) {
                $registry = new Registry($pm->params);
                $posts    = $registry->get('receivers.posts');

                foreach ($posts as $post) {
                    if (!isset($messages[$post]->pm)) {
                        $messages[$post]->pm = [];
                    }

                    $messages[$post]->pm[$pm->id] = $pm;
                }
            }
        }

        $this->history = $messages;

        KunenaUserHelper::loadUsers($userlist);

        // Run events
        $params = new Registry();
        $params->set('ksource', 'kunena');
        $params->set('kunena_view', 'topic');
        $params->set('kunena_layout', 'history');

        PluginHelper::importPlugin('kunena');

        foreach ($this->history as &$result) {
            $prepareEvent = new KunenaPrepareEvent('onKunenaPrepare', [
                'context' => 'kunena.messages',
                'subject' => $result,
                'params'  => $params,
                'page'    => 0
            ]);
            $this->app->getDispatcher()->dispatch('onKunenaPrepare', $prepareEvent);
        }

        // FIXME: need to improve BBCode class on this...
        $this->attachments        = KunenaAttachmentHelper::getByMessage($this->history);
        $this->inline_attachments = [];

        $this->headerText = Text::_('COM_KUNENA_POST_EDIT') . ' ' . $this->topic->subject;
    }

    /**
     * Prepare document.
     *
     * @return  void
     *
     * @since   Kunena 6.0
     */
    protected function prepareDocument() {}
}