| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/brest/components/com_kunena/src/Controllers/ |
Upload File : |
<?php
/**
* Kunena Component
*
* @package Kunena.Site
* @subpackage Controllers
*
* @copyright Copyright (C) 2008 - 2025 Kunena Team. All rights reserved.
* @license https://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link https://www.kunena.org
**/
namespace Kunena\Forum\Site\Controllers;
\defined('_JEXEC') or die();
use Exception;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Session\Session;
use Joomla\Database\Exception\ExecutionFailureException;
use Joomla\Utilities\ArrayHelper;
use Kunena\Forum\Libraries\Attachment\KunenaFinder;
use Kunena\Forum\Libraries\Controller\KunenaController;
use Kunena\Forum\Libraries\Error\KunenaError;
use Kunena\Forum\Libraries\Factory\KunenaFactory;
use Kunena\Forum\Libraries\Forum\Category\KunenaCategoryHelper;
use Kunena\Forum\Libraries\Forum\KunenaForum;
use Kunena\Forum\Libraries\Forum\Message\KunenaMessageHelper;
use Kunena\Forum\Libraries\Forum\Topic\KunenaTopicHelper;
use Kunena\Forum\Libraries\Log\KunenaLog;
/**
* Kunena Topics Controller
*
* @since Kunena 2.0
*/
class TopicsController extends KunenaController
{
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function none()
{
$this->app->enqueueMessage(Text::_('COM_KUNENA_CONTROLLER_NO_TASK'), 'error');
$this->setRedirectBack();
}
/**
* @return boolean|void
*
* @throws null
* @throws void
* @throws Exception
* @since Kunena 6.0
*/
public function permdel()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$message = '';
$ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$topics = KunenaTopicHelper::getTopics($ids);
if (!$topics) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_TOPICS_SELECTED'), 'notice');
$this->setRedirectBack();
} else {
$messages = KunenaMessageHelper::getMessagesByTopics($ids);
foreach ($topics as $topic) {
try {
$topic->isAuthorised('permdelete');
$topic->delete();
// Activity integration
$activity = KunenaFactory::getActivityIntegration();
$activity->onAfterDeleteTopic($topic);
$message = Text::_('COM_KUNENA_BULKMSG_DELETED');
KunenaCategoryHelper::recount($topic->getCategory()->id);
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
// Delete attachments in each message
$finder = new KunenaFinder();
$finder->where('mesid', 'IN', array_keys($messages));
$attachments = $finder->find();
if ($finder->count() > 0) {
foreach ($attachments as $instance) {
$instance->exists(false);
unset($instance);
}
$query = $this->db->createQuery()->select(['a.id'])
->from($this->db->quoteName('#__kunena_attachments', 'a'))
->leftJoin($this->db->quoteName('#__kunena_messages', 'm') . ' ON ' . $this->db->quoteName('a.mesid') . '=' . $this->db->quoteName('m.id'))
->where($this->db->quoteName('m.id') . ' IS NULL');
$this->db->setQuery($query);
try {
$list = $this->db->loadObjectList('id');
} catch (ExecutionFailureException $e) {
KunenaError::displayDatabaseError($e);
return false;
}
$ids = implode(',', array_keys($list));
$query = $this->db->createQuery()->delete($this->db->quoteName('#__kunena_attachments'))->where('id IN (' . $ids . ')');
$this->db->setQuery($query);
try {
$this->db->execute();
} catch (ExecutionFailureException $e) {
KunenaError::displayDatabaseError($e);
return false;
}
}
}
if ($message) {
if ($this->config->logModeration) {
foreach ($topics as $topic) {
KunenaLog::log(
KunenaLog::TYPE_MODERATION,
KunenaLog::LOG_TOPIC_DESTROY,
['topic_ids' => $ids],
$topic->getCategory(),
$topic,
null
);
}
}
$this->app->enqueueMessage($message, 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function delete()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$message = '';
$topics = KunenaTopicHelper::getTopics($ids);
if (!$topics) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_TOPICS_SELECTED'), 'notice');
$this->setRedirectBack();
} else {
foreach ($topics as $topic) {
try {
$topic->isAuthorised('delete');
$topic->publish(KunenaForum::TOPIC_DELETED);
$message = Text::_('COM_KUNENA_BULKMSG_DELETED');
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
if ($message) {
if ($this->config->logModeration) {
foreach ($topics as $topic) {
KunenaLog::log(
KunenaLog::TYPE_MODERATION,
KunenaLog::LOG_TOPIC_DELETE,
['topic_ids' => $ids],
$topic->getCategory(),
$topic,
null
);
}
}
$this->app->enqueueMessage($message, 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function restore()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$message = '';
$topics = KunenaTopicHelper::getTopics($ids);
if (!$topics) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_TOPICS_SELECTED'), 'notice');
$this->setRedirectBack();
} else {
foreach ($topics as $topic) {
try {
$topic->isAuthorised('undelete');
$topic->publish(KunenaForum::PUBLISHED);
$message = Text::_('COM_KUNENA_POST_SUCCESS_UNDELETE');
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
if ($message) {
if ($this->config->logModeration) {
foreach ($topics as $topic) {
KunenaLog::log(
KunenaLog::TYPE_MODERATION,
KunenaLog::LOG_TOPIC_UNDELETE,
['topic_ids' => $ids],
$topic->getCategory(),
$topic,
null
);
}
}
$this->app->enqueueMessage($message, 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function approve()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$message = '';
$topics = KunenaTopicHelper::getTopics($ids);
if (!$topics) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_TOPICS_SELECTED'), 'error');
$this->setRedirectBack();
} else {
foreach ($topics as $topic) {
try {
$topic->isAuthorised('approve');
$topic->publish(KunenaForum::PUBLISHED);
$message = Text::_('COM_KUNENA_MODERATE_APPROVE_SUCCESS');
$topic->sendNotification();
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
if ($message) {
if ($this->config->logModeration) {
foreach ($topics as $topic) {
KunenaLog::log(
KunenaLog::TYPE_MODERATION,
KunenaLog::LOG_TOPIC_APPROVE,
['topic_ids' => $ids],
$topic->getCategory(),
$topic,
null
);
}
}
$this->app->enqueueMessage($message, 'success');
}
$this->setRedirectBack();
}
/**
* Move posts or messages
*
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function move()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$topics_ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$messages_ids = array_keys($this->app->input->get('posts', [], 'post', 'array'));
if (!empty($topics_ids)) {
$topics_ids = ArrayHelper::toInteger($topics_ids);
$topics = KunenaTopicHelper::getTopics($topics_ids);
} else {
$messages_ids = ArrayHelper::toInteger($messages_ids);
$messages = KunenaMessageHelper::getMessages($messages_ids);
}
if (!$topics_ids && !$messages_ids) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_MESSAGES_OR_TOPICS_SELECTED'), 'notice');
$this->setRedirectBack();
} else {
$target = KunenaCategoryHelper::get($this->app->input->getInt('target', 0));
if (empty($target->id)) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ACTION_NO_CATEGORY_SELECTED'), 'notice');
$this->setRedirectBack();
}
try {
$target->isAuthorised('read');
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
if ($topics) {
foreach ($topics as $topic) {
try {
$topic->isAuthorised('move');
$topic->move($target);
$message = Text::_('COM_KUNENA_ACTION_TOPIC_SUCCESS_MOVE');
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
} else {
foreach ($messages as $message) {
$topic = $message->getTopic();
try {
$message->isAuthorised('move');
$topic->move($target, $message->id);
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
}
if (!empty($message)) {
if ($this->config->logModeration) {
foreach ($topics as $topic) {
KunenaLog::log(
KunenaLog::TYPE_MODERATION,
KunenaLog::LOG_TOPIC_MODERATE,
[
'move' => ['id' => $topic->id, 'mode' => 'topic'],
'target' => ['category_id' => $target->id],
],
$topic->getCategory(),
$topic,
null
);
}
}
$this->app->enqueueMessage($message, 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function unfavorite()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$topics = KunenaTopicHelper::getTopics($ids);
if (KunenaTopicHelper::favorite(array_keys($topics), 0)) {
if ($this->config->logModeration) {
foreach ($topics as $topic) {
KunenaLog::log(
$this->me->userid == $topic->getAuthor()->userid ? KunenaLog::TYPE_ACTION : KunenaLog::TYPE_MODERATION,
KunenaLog::LOG_TOPIC_UNFAVORITE,
['topic_ids' => $ids],
$topic->getCategory(),
$topic,
null
);
}
}
$this->app->enqueueMessage(Text::_('COM_KUNENA_USER_UNFAVORITE_YES'), 'success');
} else {
$this->app->enqueueMessage(Text::_('COM_KUNENA_POST_NO_UNFAVORITED_TOPIC'), 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function unsubscribe()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$userid = $this->app->input->getInt('userid');
$ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$topics = KunenaTopicHelper::getTopics($ids);
if (KunenaTopicHelper::subscribe(array_keys($topics), 0, $userid)) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_USER_UNSUBSCRIBE_YES'), 'success');
} else {
$this->app->enqueueMessage(Text::_('COM_KUNENA_POST_NO_UNSUBSCRIBED_TOPIC'), 'notice');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function approve_posts()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('posts', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$success = 0;
$messages = KunenaMessageHelper::getMessages($ids);
if (!$messages) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_MESSAGES_SELECTED'), 'notice');
} else {
foreach ($messages as $message) {
try {
$message->isAuthorised('approve');
$message->publish(KunenaForum::PUBLISHED);
$message->sendNotification();
$success++;
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
if ($success) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_MODERATE_APPROVE_SUCCESS'), 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function delete_posts()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('topics', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$success = 0;
$messages = KunenaMessageHelper::getMessages($ids);
if (!$messages) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_MESSAGES_SELECTED'), 'notice');
} else {
foreach ($messages as $message) {
try {
$message->isAuthorised('delete');
$message->publish(KunenaForum::DELETED);
$success++;
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
if ($success) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_POST_SUCCESS_DELETE'), 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function restore_posts()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('posts', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$success = 0;
$messages = KunenaMessageHelper::getMessages($ids);
if (!$messages) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_MESSAGES_SELECTED'), 'notice');
} else {
foreach ($messages as $message) {
try {
$message->isAuthorised('undelete');
$message->publish(KunenaForum::PUBLISHED);
$success++;
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
if ($success) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_POST_SUCCESS_UNDELETE'), 'success');
}
$this->setRedirectBack();
}
/**
* @return void
*
* @throws null
* @throws Exception
* @since Kunena 6.0
*/
public function permdel_posts()
{
if (!Session::checkToken('post')) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error');
$this->setRedirectBack();
return;
}
$ids = array_keys($this->app->input->get('posts', [], 'post', 'array'));
$ids = ArrayHelper::toInteger($ids);
$success = 0;
$messages = KunenaMessageHelper::getMessages($ids);
if (!$messages) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_NO_MESSAGES_SELECTED'), 'notice');
} else {
foreach ($messages as $message) {
try {
$message->isAuthorised('permdelete');
$message->delete();
$success++;
} catch (Exception $e) {
$this->app->enqueueMessage($e->getMessage(), 'error');
}
}
}
if ($success) {
$this->app->enqueueMessage(Text::_('COM_KUNENA_BULKMSG_DELETED'), 'success');
}
$this->setRedirectBack();
}
}