Файловый менеджер - Редактировать - /var/www/html/administrator/components/com_kunena/src/Controller/UsersController.php
Ðазад
<?php /** * Kunena Component * * @package Kunena.Administrator * @subpackage Controllers * * @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\Administrator\Controller; \defined('_JEXEC') or die(); use Exception; use Joomla\CMS\Date\Date; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; use Joomla\CMS\Session\Session; use Joomla\CMS\User\UserFactoryInterface; use Joomla\Utilities\ArrayHelper; use Kunena\Forum\Libraries\Access\KunenaAccess; use Kunena\Forum\Libraries\Controller\KunenaController; use Kunena\Forum\Libraries\Forum\Category\KunenaCategory; use Kunena\Forum\Libraries\Forum\Category\KunenaCategoryHelper; use Kunena\Forum\Libraries\Forum\KunenaForum; use Kunena\Forum\Libraries\Forum\Message\KunenaMessageHelper; use Kunena\Forum\Libraries\Route\KunenaRoute; use Kunena\Forum\Libraries\User\KunenaBan; use Kunena\Forum\Libraries\User\KunenaUser; use Kunena\Forum\Libraries\User\KunenaUserHelper; /** * Kunena Users Controller * * @since Kunena 2.0 */ class UsersController extends KunenaController { /** * @var string The prefix to use with controller messages. * @since 1.6 */ protected $textPrefix = 'COM_KUNENA_USERS'; /** * @var null|string * @since Kunena 6.0 */ protected $baseurl = null; /** * Constructor. * * @param array $config An optional associative array of configuration settings. * * @throws Exception * @since Kunena 2.0 * * @see KunenaController */ public function __construct($config = array()) { parent::__construct($config); $this->baseurl = 'administrator/index.php?option=com_kunena&view=users'; } /** * Proxy for getModel. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * * @since 1.6 */ public function getModel($name = 'User', $prefix = 'Administrator', $config = ['ignore_request' => true]): object { return parent::getModel($name, $prefix, $config); } /** * Edit the user * * @return boolean|void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function edit() { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return false; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); $userid = array_shift($cid); if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return false; } $this->app->setUserState('kunena.user.userid', $userid); $this->setRedirect(Route::_("index.php?option=com_kunena&view=user&layout=edit&userid={$userid}", false)); } /** * Trash menu * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function trashusermessages(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); if ($cid) { foreach ($cid as $id) { list($total, $messages) = KunenaMessageHelper::getLatestMessages(false, 0, 0, ['starttime' => '-1', 'user' => $id]); foreach ($messages as $mes) { $mes->publish(KunenaForum::DELETED); } } } else { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $this->app->enqueueMessage(Text::_('COM_KUNENA_A_USERMES_TRASHED_DONE'), 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Move * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function move(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); if (empty($cid)) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $this->app->setUserState('kunena.usermove.userids', $cid); $this->setRedirect(Route::_("index.php?option=com_kunena&view=user&layout=move", false)); } /** * Logout the user * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function logout(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); $id = array_shift($cid); if ($id <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $options = ['clientid' => 0]; $this->app->logout((int) $id, $options); $this->app->enqueueMessage(Text::_('COM_KUNENA_A_USER_LOGOUT_DONE'), 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Remove the user * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function remove(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); if (empty($cid)) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $users = KunenaUserHelper::loadUsers($cid); $my = $this->app->getIdentity(); $usernames = []; foreach ($users as $user) { if ($my->id == $user->userid) { $this->app->enqueueMessage(Text::_('COM_KUNENA_USER_ERROR_CANNOT_DELETE_YOURSELF'), 'error'); continue; } $instance = Factory::getContainer(UserFactoryInterface::class)->get(UserFactoryInterface::class)->loadUserById($user->userid); if ($instance->authorise('core.admin')) { $this->app->enqueueMessage(Text::_('COM_KUNENA_USER_ERROR_CANNOT_DELETE_ADMINS'), 'error'); continue; } $result = $user->delete(); if (!$result) { $this->app->enqueueMessage(Text::sprintf('COM_KUNENA_USER_DELETE_KUNENA_USER_TABLE_FAILED', $user->userid), 'error'); continue; } // Delete the user too from Joomla! $jresult = $instance->delete(); if (!$jresult) { $this->app->enqueueMessage(Text::sprintf('COM_KUNENA_USER_DELETE_JOOMLA_USER_TABLE_FAILED', $user->userid), 'error'); continue; } $usernames[] = $user->username; } if (!empty($usernames)) { $this->app->enqueueMessage(Text::sprintf('COM_KUNENA_USER_DELETE_DONE_SUCCESSFULLY', implode(', ', $usernames)), 'success'); } $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Ban * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function ban(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); $userid = array_shift($cid); if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $ban = KunenaBan::getInstanceByUserid($userid, true); if (!$ban->id) { $ban->ban($userid); } else { $now = new Date(); $ban->setExpiration($now); } $message = Text::_('COM_KUNENA_USER_BANNED_DONE'); try { $ban->save(); } catch (Exception $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); } $this->app->enqueueMessage($message, 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Unban * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function unban(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); $userid = array_shift($cid); if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $ban = KunenaBan::getInstanceByUserid($userid, true); if (!$ban->id) { $ban->ban($userid); } else { $now = new Date(); $ban->setExpiration($now); } $message = Text::_('COM_KUNENA_USER_UNBAN_DONE'); try { $ban->save(); } catch (Exception $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); } $this->app->enqueueMessage($message, 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Set an user as global moderator, works only if you are an admin * * @return void * * @throws null * @since Kunena 5.1 */ public function moderate(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $modCatids = $this->input->get('catid', [], 'array'); $modCatids = ArrayHelper::toInteger($modCatids); $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid); $userid = array_shift($cid); if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $user = KunenaUserHelper::get($userid); $this->setModerate($user, $modCatids); $this->app->enqueueMessage(Text::_('COM_KUNENA_USER_MODERATE_DONE'), 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Set moderator rights on the user given * * @param KunenaUser $user user * @param array $modCatids modCatids * * @return boolean * * @throws Exception * @since Kunena 5.1 */ protected function setModerate(KunenaUser $user, array $modCatids): bool { // Update moderator rights $categories = KunenaCategoryHelper::getCategories(false, false, 'admin'); foreach ($categories as $category) { $category->setModerator($user, \in_array($category->id, $modCatids, true)); } // Global moderator is a special case if (KunenaUserHelper::getMyself()->isAdmin()) { KunenaAccess::getInstance()->setModerator((object) [], $user, \in_array(0, $modCatids, true)); } return true; } /** * Unmoderate * * @return void * * @throws Exception * @throws null * @since Kunena 5.1 */ public function unmoderate(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid); $userid = array_shift($cid); if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $user = KunenaUserHelper::get($userid); $category = null; if ($category instanceof KunenaCategory) { $category = $category->id; } $category = \intval($category); $userCategory = KunenaUserHelper::get($category, $user); if ($userCategory->role == 1) { $userCategory->role = false; if (!$userCategory->params) { $userCategory->params = ''; } $success = $userCategory->save(); // Clear role cache KunenaAccess::getInstance()->clearCache(); // Change user moderator status $moderator = KunenaAccess::getInstance()->getModeratorStatus($user); if ($user->moderator != !empty($moderator)) { $user->moderator = \intval(!empty($moderator)); try { $success = $user->save(); } catch (Exception $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); } } } $message = Text::_('COM_KUNENA_USER_UNMODERATE_DONE'); if ($success) { $this->app->enqueueMessage($message, 'success'); } $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Block * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function block() { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); $userid = array_shift($cid); if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $ban = KunenaBan::getInstanceByUserid($userid, true); if (!$ban->id) { $ban->ban($userid, null, 1); } else { $now = new Date(); $ban->setExpiration($now); } $message = Text::_('COM_KUNENA_USER_BLOCKED_DONE'); try { $ban->save(); } catch (Exception $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); } $this->app->enqueueMessage($message, 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Unblock * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function unblock(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); $userid = array_shift($cid); if ($userid <= 0) { $this->app->enqueueMessage(Text::_('COM_KUNENA_PROFILE_NO_USER'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $ban = KunenaBan::getInstanceByUserid($userid, true); if (!$ban->id) { $ban->ban($userid, null, 1); } else { $now = new Date(); $ban->setExpiration($now); } $message = Text::_('COM_KUNENA_USER_UNBLOCK_DONE'); try { $ban->save(); } catch (Exception $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); } $this->app->enqueueMessage($message, 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Batch Moderators * * @return void * * @throws Exception * @throws null * @since Kunena 2.0 */ public function batchmoderators(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); $catids = $this->input->get('catid', [], 'array'); $catids = ArrayHelper::toInteger($catids, []); if (empty($cid)) { $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_BATCH_NO_USERS_SELECTED'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } if (empty($catids)) { $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_BATCH_NO_CATEGORIES_SELECTED'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } // Update moderator rights $categories = KunenaCategoryHelper::getCategories(false, false, 'admin'); $users = KunenaUserHelper::loadUsers($cid); foreach ($users as $user) { foreach ($categories as $category) { if (\in_array($category->id, $catids)) { $category->setModerator($user, true); } } // Global moderator is a special case if ($this->me->isAdmin() && \in_array(0, $catids)) { KunenaAccess::getInstance()->setModerator(0, $user, true); } } $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_SET_MODERATORS_DONE'), 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Method to just redirect to main manager in case of use of cancel button * * @return void * * @throws Exception * @throws null * @since Kunena 4.0 */ public function cancel(): void { $this->app->redirect(KunenaRoute::_($this->baseurl, false)); } /** * Remove categories subscriptions for the users selected * * @return void * * @throws Exception * @throws null * @since Kunena 6.0 */ public function removecatsubscriptions(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); if (!empty($cid)) { foreach ($cid as $userid) { $query = $this->db->createQuery(); $query->update($this->db->quoteName('#__kunena_user_categories')) ->set($this->db->quoteName('subscribed') . ' = 0') ->where($this->db->quoteName('user_id') . ' = ' . $userid); $this->db->setQuery($query); try { $this->db->execute(); } catch (Exception $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); return; } } } $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_REMOVE_CAT_SUBSCRIPTIONS_DONE'), 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Remove topics subscriptions for the users selected * * @return void * * @throws Exception * @throws null * @since Kunena 6.0 */ public function removetopicsubscriptions(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $cid = $this->input->get('cid', [], 'array'); $cid = ArrayHelper::toInteger($cid, []); if (!empty($cid)) { foreach ($cid as $userid) { $query = $this->db->createQuery(); $query->update($this->db->quoteName('#__kunena_user_topics')) ->set($this->db->quoteName('subscribed') . ' = 0') ->where($this->db->quoteName('user_id') . ' = ' . $userid); $this->db->setQuery($query); try { $this->db->execute(); } catch (Exception $e) { $this->app->enqueueMessage($e->getMessage(), 'error'); return; } } } $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_REMOVE_TOPIC_SUBSCRIPTIONS_DONE'), 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } /** * Subscribe users to categories selected * * @return void * * @throws Exception * @throws null * @since Kunena 6.0 */ public function subscribeuserstocategories(): void { if (!Session::checkToken()) { $this->app->enqueueMessage(Text::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $userids = $this->input->get('cid', [], 'array'); $userids = ArrayHelper::toInteger($userids); $catids = $this->input->get('catid', [], 'array'); $catids = ArrayHelper::toInteger($catids); if (empty($userids)) { $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_BATCH_NO_USERS_SELECTED'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } if (empty($catids)) { $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_BATCH_NO_CATEGORIES_SELECTED'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } $categories = KunenaCategoryHelper::getCategories($catids); foreach ($userids as $userid) { foreach ($categories as $category) { $category->subscribe(true, $userid); } } $this->app->enqueueMessage(Text::_('COM_KUNENA_USERS_ADD_CATEGORIES_SUBSCRIPTIONS_DONE'), 'success'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); } }
| ver. 1.1 | |
.
| PHP 8.4.18 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0 |
proxy
|
phpinfo
|
ÐаÑтройка