shell bypass 403
<?php /** * @package admintools * @copyright Copyright (c)2010-2024 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Component\AdminTools\Administrator\Mixin; defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; use Joomla\Utilities\ArrayHelper; trait ControllerCopyTrait { /** * Method to copy (duplicate) a list of items. * * @return void * * @since 7.0 */ public function copy() { // Check for request forgeries $this->checkToken(); // Get items to publish from the request. $cid = $this->input->get('cid', [], 'array'); if (empty($cid)) { $this->app->getLogger()->warning(Text::_($this->text_prefix . '_NO_ITEM_SELECTED'), ['category' => 'jerror']); $this->setRedirect( Route::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false ) ); return; } // Get the model. $model = $this->getModel(); // Make sure the item ids are integers $cid = ArrayHelper::toInteger($cid); $this->triggerEvent('onBeforeCopy', [&$cid]); // Publish the items. try { $copyMap = $model->copy($cid) ?: []; $errors = $model->getErrors(); $copiedSuccess = count($copyMap); $copiedFailed = count($cid) - $copiedSuccess; $app = Factory::getApplication(); if (count($errors)) { foreach ($errors as $error) { $app->enqueueMessage($error, 'error'); } } if ($copiedFailed > 0) { $app->enqueueMessage(Text::plural($this->text_prefix . '_N_ITEMS_FAILED_COPY', $copiedFailed), 'error'); } if ($copiedSuccess > 0) { $this->setMessage(Text::plural($this->text_prefix . '_N_ITEMS_COPIED', \count($cid))); } } catch (\Exception $e) { $this->setMessage($e->getMessage(), 'error'); } $this->triggerEvent('onAfterCopy', [&$cid, &$copyMap]); $this->setRedirect( Route::_( 'index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToListAppend(), false ) ); } }