File manager - Edit - /home/ferretapmx/public_html/com_joomlaupdate.zip
Back
PK ��\�YR % src/View/Notification/JsonapiView.phpnu �[��� <?php /** * @package Joomla.API * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Joomlaupdate\Api\View\Notification; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Uri\Uri; use Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The notification view * * @since 5.4.0 */ class JsonapiView extends BaseApiView { /** * Sends the update result notification * * @return string The rendered data * * @since 5.4.0 */ public function notification($type, $oldVersion, $newVersion) { /** * @var UpdateModel $model */ $model = $this->getModel(); $success = true; try { // Perform the finalization action $model->sendNotification($type, $oldVersion, $newVersion); } catch (\Throwable $e) { $success = false; } $element = (new Resource((object) ['success' => $success, 'id' => $type], $this->serializer)) ->fields(['notification' => ['success']]); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } } PK ��\�Sʉ� � src/View/Notification/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK ��\)}�� � src/View/Updates/JsonapiView.phpnu �[��� <?php /** * @package Joomla.API * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Joomlaupdate\Api\View\Updates; use Joomla\CMS\Factory; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Uri\Uri; use Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The updates view * * @since 5.4.0 */ class JsonapiView extends BaseApiView { /** * Generates the update output * * @return string The rendered data * * @since 5.4.0 */ public function getUpdate() { /** * @var UpdateModel $model */ $model = $this->getModel(); $latestVersion = $model->getAutoUpdateVersion(); if (!$latestVersion || version_compare(JVERSION, $latestVersion) >= 0) { $latestVersion = null; } // Check pre-update states, unset update if not matched $preUpdateState = $model->getAutoUpdateRequirementsState(); if (!$preUpdateState) { $latestVersion = null; } // Prepare response $element = (new Resource((object) ['availableUpdate' => $latestVersion, 'id' => 'getUpdate'], $this->serializer)) ->fields(['updates' => ['availableUpdate']]); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } /** * Prepares the update by setting up the update.php and returns password and file size * * @param string $targetVersion The target version to prepare * * @return string The rendered data * * @since 5.4.0 */ public function prepareUpdate(string $targetVersion): string { /** * @var UpdateModel $model */ $model = $this->getModel(); $fileinformation = $model->prepareAutoUpdate($targetVersion); $fileinformation['id'] = 'prepareUpdate'; $element = (new Resource((object) $fileinformation, $this->serializer)) ->fields(['updates' => ['password', 'filesize', 'filename']]); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } /** * Run the finalize update steps * * @param string $fromVersion The from version * @param string $updateFileName The name of the update file * * @return string The rendered data * * @since 5.4.0 */ public function finalizeUpdate($fromVersion, $updateFileName) { /** * @var UpdateModel $model */ $model = $this->getModel(); // Write old version and filename to state for usage in model Factory::getApplication()->setUserState('com_joomlaupdate.oldversion', $fromVersion); Factory::getApplication()->setUserState('com_joomlaupdate.file', $updateFileName); try { // Perform the finalization action $model->finaliseUpgrade(); } catch (\Throwable $e) { $model->collectError('finaliseUpgrade', $e); } try { // Load actionlog plugins. PluginHelper::importPlugin('actionlog'); // Perform the cleanup action $model->cleanUp(); } catch (\Throwable $e) { $model->collectError('cleanUp', $e); } // Reset source $model->resetUpdateSource(); $success = true; $errors = []; // Append any errors to the API response for debugging purposes if ($model->getErrors()) { $success = false; $errors = array_map(function ($error) { return (string) $error; }, $model->getErrors()); } $element = (new Resource((object) ['success' => $success, 'id' => 'finalizeUpdate', 'errors' => $errors], $this->serializer)) ->fields(['updates' => ['success', 'errors']]); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } } PK ��\�Sʉ� � src/View/Updates/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK ��\�&��_ _ $ src/View/Healthcheck/JsonapiView.phpnu �[��� <?php /** * @package Joomla.API * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Joomlaupdate\Api\View\Healthcheck; use Joomla\CMS\Factory; use Joomla\CMS\MVC\View\JsonApiView as BaseApiView; use Joomla\CMS\Uri\Uri; use Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel; use Joomla\Database\DatabaseInterface; use Tobscure\JsonApi\Resource; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The healthcheck view * * @since 5.4.0 */ class JsonapiView extends BaseApiView { /** * Generates the health check output * * @return string The rendered data * * @since 5.4.0 */ public function healthCheck() { $data = $this->getStatsData(); $data['id'] = 'healthcheck'; $element = (new Resource((object) $data, $this->serializer)) ->fields(['healthcheck' => ['php_version', 'db_type', 'db_version', 'cms_version', 'server_os', 'update_requirement_state']]); $this->getDocument()->setData($element); $this->getDocument()->addLink('self', Uri::current()); return $this->getDocument()->render(); } /** * Get the data that will be sent to the update server. * * @return array * * @since 5.4.0 */ protected function getStatsData() { $db = Factory::getContainer()->get(DatabaseInterface::class); /** @var UpdateModel $updateModel */ $updateModel = Factory::getApplication()->bootComponent('com_joomlaupdate') ->getMVCFactory()->createModel('Update', 'Administrator', ['ignore_request' => true]); $data = [ 'php_version' => PHP_VERSION, 'db_type' => $db->name, 'db_version' => $db->getVersion(), 'cms_version' => JVERSION, 'server_os' => php_uname('s') . ' ' . php_uname('r'), 'update_requirement_state' => $updateModel->getAutoUpdateRequirementsState(), ]; // Check if we have a MariaDB version string and extract the proper version from it if (preg_match('/^(?:5\.5\.5-)?(mariadb-)?(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)/i', $data['db_version'], $versionParts)) { $data['db_version'] = $versionParts['major'] . '.' . $versionParts['minor'] . '.' . $versionParts['patch']; } return $data; } } PK ��\�Sʉ� � src/View/Healthcheck/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK ��\�Sʉ� � src/View/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK ��\�^l� � ! src/Controller/BaseController.phpnu �[��� <?php /** * @package Joomla.API * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Joomlaupdate\Api\Controller; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\MVC\Controller\ApiController; use Joomla\CMS\MVC\Controller\Exception\ResourceNotFound; use Tobscure\JsonApi\Exception\InvalidParameterException; abstract class BaseController extends ApiController { /** * Validate if the update token is correct and auto update is enabled * * @return void * * @since 5.4.0 * * @throws \Exception */ protected function validateUpdateToken(): void { $config = ComponentHelper::getParams('com_joomlaupdate'); if ($config->get('updatesource') !== 'default' || (int) $config->get('minimum_stability') !== 4 || !$config->get('autoupdate')) { throw new ResourceNotFound('Auto update is disabled', 404); } $token = $this->input->server->get('HTTP_X_JUPDATE_TOKEN', '', 'STRING'); if (empty($token)) { throw new InvalidParameterException('Token is required', 403, null, 'token'); } if ($config->get('update_token') !== $token) { throw new InvalidParameterException('Invalid token', 403, null, 'token'); } } } PK ��\ �� � ( src/Controller/HealthcheckController.phpnu �[��� <?php /** * @package Joomla.API * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Joomlaupdate\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The healthcheck controller * * @since 5.4.0 */ class HealthcheckController extends BaseController { /** * The content type of the item. * * @var string * @since 5.4.0 */ protected $contentType = 'healthcheck'; /** * The default view for the display method. * * @var string * @since 5.4.0 */ protected $default_view = 'healthcheck'; /** * Show the healthcheck information * * @return HealthcheckController * * @since 5.4.0 */ public function show() { $this->validateUpdateToken(); $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonApiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var UpdateModel $model */ $model = $this->getModel('Update', 'Administrator', ['ignore_request' => true, 'state' => $this->modelState]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } // Push the model into the view (as default) $view->setModel($model, true); $view->setDocument($this->app->getDocument()); $view->healthCheck(); // If we reach this point, healthcheck was successful, so update the date in the config $model->updateLastHealthCheck(); return $this; } /** * Basic display of an item view. We don't allow this * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 5.4.0 */ public function displayItem($id = null) { throw new \RuntimeException('Not implemented', 501); } /** * List view amended to add filtering of data. We don't allow this * * @return static A BaseController object to support chaining. * * @since 5.4.0 */ public function displayList() { throw new \RuntimeException('Not implemented', 501); } /** * Removes an item. * * @param integer $id The primary key to delete item. * * @return void * * @since 5.4.0 */ public function delete($id = null) { throw new \RuntimeException('Not implemented', 501); } /** * Method to check if you can edit an existing record. * * We don't allow editing from API (yet?) * * @param array $data An array of input data. * @param string $key The name of the key for the primary key; default is id. * * @return boolean * * @since 5.4.0 */ protected function allowEdit($data = [], $key = 'id') { return false; } /** * Method to check if you can add a new record. * * We don't allow adding from API * * @param array $data An array of input data. * * @return boolean * * @since 5.4.0 */ protected function allowAdd($data = []) { return false; } } PK ��\C^= = ) src/Controller/NotificationController.phpnu �[��� <?php /** * @package Joomla.API * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Joomlaupdate\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\Component\Joomlaupdate\Administrator\Model\NotificationModel; use Joomla\Component\Joomlaupdate\Api\View\Updates\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The updates controller * * @since 5.4.0 */ class NotificationController extends BaseController { /** * The content type of the item. * * @var string * @since 5.4.0 */ protected $contentType = 'notification'; /** * The default view for the display method. * * @var string * @since 5.4.0 */ protected $default_view = 'notification'; /** * Send fail notification to configured super users * * @return NotificationController For chaining */ public function failed() { $this->validateUpdateToken(); $fromVersion = $this->input->json->getString('fromVersion', null); $toVersion = $this->input->json->getString('toVersion', null); $view = $this->prepareView(); $view->notification('failed', $fromVersion, $toVersion); return $this; } /** * Send success notification to configured super users * * @return NotificationController * * @since 5.4.0 */ public function success() { $this->validateUpdateToken(); $fromVersion = $this->input->json->getString('fromVersion', null); $toVersion = $this->input->json->getString('toVersion', null); $view = $this->prepareView(); $view->notification('success', $fromVersion, $toVersion); return $this; } /** * Generic method to prepare the view * * @return JsonapiView The prepared view */ protected function prepareView() { $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonApiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var NotificationModel $model */ $model = $this->getModel('Notification', 'Administrator', ['ignore_request' => true, 'state' => $this->modelState]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } // Push the model into the view (as default) $view->setModel($model, true); $view->setDocument($this->app->getDocument()); return $view; } /** * Basic display of an item view. We don't allow this * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 5.4.0 */ public function displayItem($id = null) { throw new \RuntimeException('Not implemented', 501); } /** * List view amended to add filtering of data. We don't allow this * * @return static A BaseController object to support chaining. * * @since 5.4.0 */ public function displayList() { throw new \RuntimeException('Not implemented', 501); } /** * Removes an item. * * @param integer $id The primary key to delete item. * * @return void * * @since 5.4.0 */ public function delete($id = null) { throw new \RuntimeException('Not implemented', 501); } /** * Method to check if you can edit an existing record. * * We don't allow editing from API (yet?) * * @param array $data An array of input data. * @param string $key The name of the key for the primary key; default is id. * * @return boolean * * @since 5.4.0 */ protected function allowEdit($data = [], $key = 'id') { return false; } /** * Method to check if you can add a new record. * * We don't allow adding from API * * @param array $data An array of input data. * * @return boolean * * @since 5.4.0 */ protected function allowAdd($data = []) { return false; } } PK ��\Ǿ8f f $ src/Controller/UpdatesController.phpnu �[��� <?php /** * @package Joomla.API * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Joomlaupdate\Api\Controller; use Joomla\CMS\Language\Text; use Joomla\Component\Joomlaupdate\Api\View\Updates\JsonapiView; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * The updates controller * * @since 5.4.0 */ class UpdatesController extends BaseController { /** * The content type of the item. * * @var string * @since 5.4.0 */ protected $contentType = 'updates'; /** * The default view for the display method. * * @var string * @since 5.4.0 */ protected $default_view = 'updates'; /** * Get the latest update version for the auto updater * * @return UpdateController For chaining */ public function getUpdate() { $this->validateUpdateToken(); $view = $this->prepareView(); $view->getUpdate(); return $this; } /** * Prepare the update and output the update information * * @return UpdatesController * * @since 5.4.0 */ public function prepareUpdate() { $this->validateUpdateToken(); /** * @var UpdateModel $model */ $model = $this->getModel('Update'); $latestVersion = $model->getAutoUpdateVersion(); $targetVersion = $this->input->json->getString('targetVersion'); if (!$latestVersion || $latestVersion !== $targetVersion) { throw new \Exception(Text::_('COM_JOOMLAUPDATE_VIEW_UPDATE_VERSION_WRONG'), 410); } $view = $this->prepareView(); $view->prepareUpdate($targetVersion); return $this; } /** * Finalize the update * * @return UpdateController For chaining */ public function finalizeUpdate() { $this->validateUpdateToken(); $fromVersion = $this->input->json->getString('fromVersion', ''); $updateFileName = $this->input->json->getString('updateFileName', ''); // Sanitize provided file name $updateFileName = pathinfo($updateFileName, PATHINFO_BASENAME); $view = $this->prepareView(); $view->finalizeUpdate($fromVersion, $updateFileName); return $this; } /** * Generic method to prepare the view * * @return JsonapiView The prepared view */ protected function prepareView() { $viewType = $this->app->getDocument()->getType(); $viewName = $this->input->get('view', $this->default_view); $viewLayout = $this->input->get('layout', 'default', 'string'); try { /** @var JsonApiView $view */ $view = $this->getView( $viewName, $viewType, '', ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType] ); } catch (\Exception $e) { throw new \RuntimeException($e->getMessage()); } /** @var UpdateModel $model */ $model = $this->getModel('Update', 'Administrator', ['ignore_request' => true, 'state' => $this->modelState]); if (!$model) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE')); } // Push the model into the view (as default) $view->setModel($model, true); $view->setDocument($this->app->getDocument()); return $view; } /** * Basic display of an item view. We don't allow this * * @param integer $id The primary key to display. Leave empty if you want to retrieve data from the request * * @return static A \JControllerLegacy object to support chaining. * * @since 5.4.0 */ public function displayItem($id = null) { throw new \RuntimeException('Not implemented', 501); } /** * List view amended to add filtering of data. We don't allow this * * @return static A BaseController object to support chaining. * * @since 5.4.0 */ public function displayList() { throw new \RuntimeException('Not implemented', 501); } /** * Removes an item. * * @param integer $id The primary key to delete item. * * @return void * * @since 5.4.0 */ public function delete($id = null) { throw new \RuntimeException('Not implemented', 501); } /** * Method to check if you can edit an existing record. * * We don't allow editing from API (yet?) * * @param array $data An array of input data. * @param string $key The name of the key for the primary key; default is id. * * @return boolean * * @since 5.4.0 */ protected function allowEdit($data = [], $key = 'id') { return false; } /** * Method to check if you can add a new record. * * We don't allow adding from API * * @param array $data An array of input data. * * @return boolean * * @since 5.4.0 */ protected function allowAdd($data = []) { return false; } } PK ��\�Sʉ� � src/Controller/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK ��\�Sʉ� � src/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK ��\�Sʉ� � .htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK � �\3�� � config.xmlnu �[��� <?xml version="1.0" encoding="UTF-8"?> <config> <help key="Joomla_Update:_Options"/> <inlinehelp button="show"/> <fieldset name="sources" label="COM_JOOMLAUPDATE_CONFIG_SOURCES_LABEL" description="COM_JOOMLAUPDATE_CONFIG_SOURCES_DESC" > <field name="updatesource" type="list" label="COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_LABEL" default="default" validate="options" > <!-- Note: Changed the values lts to default and sts to next with 3.4.0 --> <!-- All invalid/unsupported/obsolete options equated to default in code with 3.4.0 --> <option value="default">COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_DEFAULT</option> <option value="next">COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_NEXT</option> <option value="custom">COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_CUSTOM</option> </field> <field name="minimum_stability" type="list" label="COM_JOOMLAUPDATE_MINIMUM_STABILITY_LABEL" description="COM_JOOMLAUPDATE_MINIMUM_STABILITY_DESC" default="4" validate="options" > <option value="0">COM_JOOMLAUPDATE_MINIMUM_STABILITY_DEV</option> <option value="1">COM_JOOMLAUPDATE_MINIMUM_STABILITY_ALPHA</option> <option value="2">COM_JOOMLAUPDATE_MINIMUM_STABILITY_BETA</option> <option value="3">COM_JOOMLAUPDATE_MINIMUM_STABILITY_RC</option> <option value="4">COM_JOOMLAUPDATE_MINIMUM_STABILITY_STABLE</option> </field> <field name="customurl" type="url" label="COM_JOOMLAUPDATE_CONFIG_CUSTOMURL_LABEL" default="" length="50" showon="updatesource:custom" validate="url" /> <field name="versioncheck" type="radio" label="COM_JOOMLAUPDATE_CONFIG_VERSIONCHECK_LABEL" description="COM_JOOMLAUPDATE_CONFIG_VERSIONCHECK_DESC" layout="joomla.form.field.radio.switcher" default="1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> <field name="backupcheck" type="radio" label="COM_JOOMLAUPDATE_CONFIG_BACKUPCHECK_LABEL" description="COM_JOOMLAUPDATE_CONFIG_BACKUPCHECK_DESC" layout="joomla.form.field.radio.switcher" default="1" > <option value="0">JHIDE</option> <option value="1">JSHOW</option> </field> </fieldset> <fieldset name="automated-updates" label="COM_JOOMLAUPDATE_CONFIG_AUTOMATED_UPDATES_LABEL" description="COM_JOOMLAUPDATE_CONFIG_AUTOMATED_UPDATES_DESC" > <field name="autoupdate" type="radio" label="COM_JOOMLAUPDATE_CONFIG_AUTOUPDATE_LABEL" description="COM_JOOMLAUPDATE_CONFIG_AUTOUPDATE_DESC" default="0" layout="joomla.form.field.radio.switcher" showon="updatesource:default[AND]minimum_stability:4" validate="options" > <option value="0">JNO</option> <option value="1">JYES</option> </field> <field name="autoupdate_status" type="hidden" /> <field name="update_token" type="text" label="COM_JOOMLAUPDATE_CONFIG_UPDATE_TOKEN_LABEL" description="COM_JOOMLAUPDATE_CONFIG_UPDATE_TOKEN_DESC" readonly="true" showon="updatesource:default[AND]minimum_stability:4[AND]autoupdate:1" /> <field name="update_last_check" type="calendar" showtime="true" filter="user_utc" translateformat="true" label="COM_JOOMLAUPDATE_CONFIG_UPDATE_LAST_CHECK_LABEL" description="COM_JOOMLAUPDATE_CONFIG_UPDATE_LAST_CHECK_DESC" readonly="true" showon="updatesource:default[AND]minimum_stability:4[AND]autoupdate:1" /> <field name="automated_updates_disabled" type="note" label="COM_JOOMLAUPDATE_CONFIG_AUTOMATED_UPDATES_DISABLED_LABEL" class="alert alert-info w-100" showon="updatesource!:default[OR]minimum_stability!:4" /> <field name="automated_updates_email_groups" type="usergrouplist" label="COM_JOOMLAUPDATE_CONFIG_AUTOUPDATE_UPDATE_EMAIL_LABEL" description="COM_JOOMLAUPDATE_CONFIG_AUTOUPDATE_UPDATE_EMAIL_DESCRIPTION" checksuperusergroup="0" multiple="true" layout="joomla.form.field.list-fancy-select" showon="updatesource:default[AND]minimum_stability:4[AND]autoupdate:1" /> </fieldset> </config> PK � �\;��PI I postinstall/autoupdate.phpnu �[��� <?php /** * @package Joomla.Administrator * @subpackage com_joomlaupdate * * @copyright (C) 2025 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Table\Extension; use Joomla\Component\Joomlaupdate\Administrator\Enum\AutoupdateRegisterState; use Joomla\Component\Joomlaupdate\Administrator\Enum\AutoupdateState; use Joomla\Database\DatabaseInterface; use Joomla\Registry\Registry; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Post-installation message about the new Automated Update: condition check. * * Returns true it is disabled. * * @return bool * @since 5.4.0 */ function com_joomlaupdate_postinstall_autoupdate_condition(): bool { return AutoupdateState::tryFrom(ComponentHelper::getParams('com_joomlaupdate')->get('autoupdate', '0')) === AutoupdateState::Disabled; } /** * Post-installation message about the new Automated Update: action. * * Enables the Automated Update. * * @return void * @since 5.4.0 */ function com_joomlaupdate_postinstall_autoupdate_action(): void { $db = Factory::getContainer()->get(DatabaseInterface::class); // Get extension row $extension = new Extension($db); $extensionId = $extension->find(['element' => 'com_joomlaupdate']); $extension->load($extensionId); // Set new update registration state $params = new Registry($extension->params); $params->set('autoupdate', AutoupdateState::Enabled); $params->set('autoupdate_status', AutoupdateRegisterState::Subscribe); $extension->params = $params->toString(); if (!$extension->store()) { throw new \RuntimeException($extension->getError()); } } PK � �\�Sʉ� � postinstall/.htaccessnu �7��m <FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'> Order allow,deny Deny from all </FilesMatch>PK � �\� t"