first commit
This commit is contained in:
121
components/com_config/forms/config.xml
Normal file
121
components/com_config/forms/config.xml
Normal file
@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form>
|
||||
<fieldset
|
||||
name="metadata"
|
||||
label="COM_CONFIG_METADATA_SETTINGS">
|
||||
<field
|
||||
name="MetaDesc"
|
||||
type="textarea"
|
||||
label="COM_CONFIG_FIELD_METADESC_LABEL"
|
||||
filter="string"
|
||||
rows="3"
|
||||
cols="30"
|
||||
maxlength="300"
|
||||
charcounter="true"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="MetaRights"
|
||||
type="textarea"
|
||||
label="JFIELD_META_RIGHTS_LABEL"
|
||||
description="JFIELD_META_RIGHTS_DESC"
|
||||
filter="string"
|
||||
cols="60"
|
||||
rows="2"
|
||||
/>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<fieldset
|
||||
name="seo"
|
||||
label="CONFIG_SEO_SETTINGS_LABEL">
|
||||
<field
|
||||
name="sef"
|
||||
type="radio"
|
||||
label="COM_CONFIG_FIELD_SEF_URL_LABEL"
|
||||
description="COM_CONFIG_FIELD_SEF_URL_DESC"
|
||||
default="1"
|
||||
layout="joomla.form.field.radio.switcher"
|
||||
filter="integer"
|
||||
>
|
||||
<option value="0">JNO</option>
|
||||
<option value="1">JYES</option>
|
||||
</field>
|
||||
|
||||
<field
|
||||
name="sitename_pagetitles"
|
||||
type="list"
|
||||
label="COM_CONFIG_FIELD_SITENAME_PAGETITLES_LABEL"
|
||||
default="0"
|
||||
filter="integer"
|
||||
validate="options"
|
||||
>
|
||||
<option value="2">COM_CONFIG_FIELD_VALUE_AFTER</option>
|
||||
<option value="1">COM_CONFIG_FIELD_VALUE_BEFORE</option>
|
||||
<option value="0">JNO</option>
|
||||
</field>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<fieldset
|
||||
name="site"
|
||||
label="CONFIG_SITE_SETTINGS_LABEL">
|
||||
|
||||
<field
|
||||
name="sitename"
|
||||
type="text"
|
||||
label="COM_CONFIG_FIELD_SITE_NAME_LABEL"
|
||||
required="true"
|
||||
filter="string"
|
||||
size="50"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="offline"
|
||||
type="radio"
|
||||
label="COM_CONFIG_FIELD_SITE_OFFLINE_LABEL"
|
||||
default="0"
|
||||
layout="joomla.form.field.radio.switcher"
|
||||
filter="integer"
|
||||
>
|
||||
<option value="0">JNO</option>
|
||||
<option value="1">JYES</option>
|
||||
</field>
|
||||
|
||||
<field
|
||||
name="access"
|
||||
type="accesslevel"
|
||||
label="COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_LABEL"
|
||||
description="COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_DESC"
|
||||
default="1"
|
||||
filter="UINT"
|
||||
validate="options"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="list_limit"
|
||||
type="list"
|
||||
label="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_LABEL"
|
||||
default="20"
|
||||
filter="integer"
|
||||
validate="options"
|
||||
>
|
||||
<option value="5">J5</option>
|
||||
<option value="10">J10</option>
|
||||
<option value="15">J15</option>
|
||||
<option value="20">J20</option>
|
||||
<option value="25">J25</option>
|
||||
<option value="30">J30</option>
|
||||
<option value="50">J50</option>
|
||||
<option value="100">J100</option>
|
||||
</field>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<field
|
||||
name="asset_id"
|
||||
type="hidden"
|
||||
/>
|
||||
</fieldset>
|
||||
</form>
|
||||
136
components/com_config/forms/modules.xml
Normal file
136
components/com_config/forms/modules.xml
Normal file
@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form>
|
||||
<fieldset>
|
||||
<field
|
||||
name="id"
|
||||
type="number"
|
||||
label="JGLOBAL_FIELD_ID_LABEL"
|
||||
default="0"
|
||||
readonly="true"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="title"
|
||||
type="text"
|
||||
label="JGLOBAL_TITLE"
|
||||
maxlength="100"
|
||||
required="true"
|
||||
size="35"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="note"
|
||||
type="text"
|
||||
label="COM_MODULES_FIELD_NOTE_LABEL"
|
||||
maxlength="255"
|
||||
size="35"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="module"
|
||||
type="hidden"
|
||||
label="COM_MODULES_FIELD_MODULE_LABEL"
|
||||
readonly="readonly"
|
||||
size="20"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="showtitle"
|
||||
type="radio"
|
||||
label="COM_MODULES_FIELD_SHOWTITLE_LABEL"
|
||||
layout="joomla.form.field.radio.switcher"
|
||||
default="1"
|
||||
size="1"
|
||||
>
|
||||
<option value="0">JHIDE</option>
|
||||
<option value="1">JSHOW</option>
|
||||
</field>
|
||||
|
||||
<field
|
||||
name="published"
|
||||
type="list"
|
||||
label="JSTATUS"
|
||||
class="form-select-color-state"
|
||||
default="1"
|
||||
size="1"
|
||||
validate="options"
|
||||
>
|
||||
<option value="1">JPUBLISHED</option>
|
||||
<option value="0">JUNPUBLISHED</option>
|
||||
<option value="-2">JTRASHED</option>
|
||||
</field>
|
||||
|
||||
<field
|
||||
name="publish_up"
|
||||
type="calendar"
|
||||
label="COM_MODULES_FIELD_PUBLISH_UP_LABEL"
|
||||
filter="user_utc"
|
||||
translateformat="true"
|
||||
showtime="true"
|
||||
size="22"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="publish_down"
|
||||
type="calendar"
|
||||
label="COM_MODULES_FIELD_PUBLISH_DOWN_LABEL"
|
||||
filter="user_utc"
|
||||
translateformat="true"
|
||||
showtime="true"
|
||||
size="22"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="client_id"
|
||||
type="hidden"
|
||||
label="COM_MODULES_FIELD_CLIENT_ID_LABEL"
|
||||
readonly="true"
|
||||
size="1"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="position"
|
||||
type="ModulesPositionedit"
|
||||
label="COM_MODULES_FIELD_POSITION_LABEL"
|
||||
addfieldprefix="Joomla\Component\Modules\Administrator\Field"
|
||||
default=""
|
||||
maxlength="50"
|
||||
client="site"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="access"
|
||||
type="accesslevel"
|
||||
label="JFIELD_ACCESS_LABEL"
|
||||
filter="UINT"
|
||||
validate="options"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="ordering"
|
||||
type="moduleorder"
|
||||
label="JFIELD_ORDERING_LABEL"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="content"
|
||||
type="editor"
|
||||
label="COM_MODULES_FIELD_CONTENT_LABEL"
|
||||
buttons="true"
|
||||
filter="\Joomla\CMS\Component\ComponentHelper::filterText"
|
||||
hide="readmore,pagebreak"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="language"
|
||||
type="contentlanguage"
|
||||
label="JFIELD_LANGUAGE_LABEL"
|
||||
>
|
||||
<option value="*">JALL</option>
|
||||
</field>
|
||||
|
||||
<field name="assignment" type="hidden" />
|
||||
|
||||
<field name="assigned" type="hidden" />
|
||||
</fieldset>
|
||||
</form>
|
||||
47
components/com_config/forms/modules_advanced.xml
Normal file
47
components/com_config/forms/modules_advanced.xml
Normal file
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form>
|
||||
<fields name="params">
|
||||
<fieldset
|
||||
name="advanced">
|
||||
|
||||
<field
|
||||
name="module_tag"
|
||||
type="moduletag"
|
||||
label="COM_MODULES_FIELD_MODULE_TAG_LABEL"
|
||||
default="div"
|
||||
validate="options"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="bootstrap_size"
|
||||
type="integer"
|
||||
label="COM_MODULES_FIELD_BOOTSTRAP_SIZE_LABEL"
|
||||
first="0"
|
||||
last="12"
|
||||
step="1"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="header_tag"
|
||||
type="headertag"
|
||||
label="COM_MODULES_FIELD_HEADER_TAG_LABEL"
|
||||
default="h3"
|
||||
validate="options"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="header_class"
|
||||
type="textarea"
|
||||
label="COM_MODULES_FIELD_HEADER_CLASS_LABEL"
|
||||
rows="3"
|
||||
validate="CssIdentifier"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="style"
|
||||
type="chromestyle"
|
||||
label="COM_MODULES_FIELD_MODULE_STYLE_LABEL"
|
||||
/>
|
||||
</fieldset>
|
||||
</fields>
|
||||
</form>
|
||||
42
components/com_config/forms/templates.xml
Normal file
42
components/com_config/forms/templates.xml
Normal file
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form>
|
||||
<fieldset>
|
||||
<field
|
||||
name="id"
|
||||
type="number"
|
||||
label="JGLOBAL_FIELD_ID_LABEL"
|
||||
default="0"
|
||||
readonly="true"
|
||||
class="readonly"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="template"
|
||||
type="text"
|
||||
label="COM_TEMPLATES_FIELD_TEMPLATE_LABEL"
|
||||
class="readonly"
|
||||
size="30"
|
||||
readonly="true"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="client_id"
|
||||
type="hidden"
|
||||
label="COM_TEMPLATES_FIELD_CLIENT_LABEL"
|
||||
class="readonly"
|
||||
default="0"
|
||||
readonly="true"
|
||||
/>
|
||||
|
||||
<field
|
||||
name="title"
|
||||
type="text"
|
||||
label="COM_TEMPLATES_FIELD_TITLE_LABEL"
|
||||
size="50"
|
||||
required="true"
|
||||
/>
|
||||
|
||||
<field name="assigned" type="hidden" />
|
||||
|
||||
</fieldset>
|
||||
</form>
|
||||
141
components/com_config/src/Controller/ConfigController.php
Normal file
141
components/com_config/src/Controller/ConfigController.php
Normal file
@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Controller;
|
||||
|
||||
use Joomla\CMS\Application\CMSApplication;
|
||||
use Joomla\CMS\Client\ClientHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\MVC\Controller\BaseController;
|
||||
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Component Controller
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
class ConfigController extends BaseController
|
||||
{
|
||||
/**
|
||||
* @param array $config An optional associative array of configuration settings.
|
||||
* Recognized key values include 'name', 'default_task', 'model_path', and
|
||||
* 'view_path' (this list is not meant to be comprehensive).
|
||||
* @param MVCFactoryInterface|null $factory The factory.
|
||||
* @param CMSApplication|null $app The JApplication for the dispatcher
|
||||
* @param \Joomla\CMS\Input\Input|null $input The Input object for the request
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
|
||||
{
|
||||
parent::__construct($config, $factory, $app, $input);
|
||||
|
||||
$this->registerTask('apply', 'save');
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to handle cancel
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function cancel()
|
||||
{
|
||||
// Redirect back to home(base) page
|
||||
$this->setRedirect(Uri::base());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to save global configuration.
|
||||
*
|
||||
* @return boolean True on success.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
// Check for request forgeries.
|
||||
$this->checkToken();
|
||||
|
||||
// Check if the user is authorized to do this.
|
||||
if (!$this->app->getIdentity()->authorise('core.admin')) {
|
||||
$this->app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'));
|
||||
$this->app->redirect('index.php');
|
||||
}
|
||||
|
||||
// Set FTP credentials, if given.
|
||||
ClientHelper::setCredentialsFromRequest('ftp');
|
||||
|
||||
$model = $this->getModel();
|
||||
|
||||
$form = $model->getForm();
|
||||
$data = $this->app->getInput()->post->get('jform', [], 'array');
|
||||
|
||||
// Validate the posted data.
|
||||
$return = $model->validate($form, $data);
|
||||
|
||||
// Check for validation errors.
|
||||
if ($return === false) {
|
||||
/*
|
||||
* The validate method enqueued all messages for us, so we just need to redirect back.
|
||||
*/
|
||||
|
||||
// Save the data in the session.
|
||||
$this->app->setUserState('com_config.config.global.data', $data);
|
||||
|
||||
// Redirect back to the edit screen.
|
||||
$this->app->redirect(Route::_('index.php?option=com_config&view=config', false));
|
||||
}
|
||||
|
||||
// Attempt to save the configuration.
|
||||
$data = $return;
|
||||
|
||||
// Access backend com_config
|
||||
$saveClass = $this->factory->createController('Application', 'Administrator', [], $this->app, $this->input);
|
||||
|
||||
// Get a document object
|
||||
$document = $this->app->getDocument();
|
||||
|
||||
// Set backend required params
|
||||
$document->setType('json');
|
||||
|
||||
// Execute backend controller
|
||||
$return = $saveClass->save();
|
||||
|
||||
// Reset params back after requesting from service
|
||||
$document->setType('html');
|
||||
|
||||
// Check the return value.
|
||||
if ($return === false) {
|
||||
/*
|
||||
* The save method enqueued all messages for us, so we just need to redirect back.
|
||||
*/
|
||||
|
||||
// Save the data in the session.
|
||||
$this->app->setUserState('com_config.config.global.data', $data);
|
||||
|
||||
// Save failed, go back to the screen and display a notice.
|
||||
$this->app->redirect(Route::_('index.php?option=com_config&view=config', false));
|
||||
}
|
||||
|
||||
// Redirect back to com_config display
|
||||
$this->app->enqueueMessage(Text::_('COM_CONFIG_SAVE_SUCCESS'));
|
||||
$this->app->redirect(Route::_('index.php?option=com_config&view=config', false));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
39
components/com_config/src/Controller/DisplayController.php
Normal file
39
components/com_config/src/Controller/DisplayController.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Controller;
|
||||
|
||||
use Joomla\CMS\MVC\Controller\BaseController;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Component Controller
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
class DisplayController extends BaseController
|
||||
{
|
||||
/**
|
||||
* Method to handle cancel
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function cancel()
|
||||
{
|
||||
// Redirect back to home(base) page
|
||||
$this->setRedirect(Uri::base());
|
||||
}
|
||||
}
|
||||
168
components/com_config/src/Controller/ModulesController.php
Normal file
168
components/com_config/src/Controller/ModulesController.php
Normal file
@ -0,0 +1,168 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Controller;
|
||||
|
||||
use Joomla\CMS\Application\AdministratorApplication;
|
||||
use Joomla\CMS\Application\CMSApplication;
|
||||
use Joomla\CMS\Client\ClientHelper;
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Form\Form;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\MVC\Controller\BaseController;
|
||||
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
use Joomla\Component\Modules\Administrator\Controller\ModuleController;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Component Controller
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
class ModulesController extends BaseController
|
||||
{
|
||||
/**
|
||||
* @param array $config An optional associative array of configuration settings.
|
||||
* Recognized key values include 'name', 'default_task', 'model_path', and
|
||||
* 'view_path' (this list is not meant to be comprehensive).
|
||||
* @param MVCFactoryInterface|null $factory The factory.
|
||||
* @param CMSApplication|null $app The Application for the dispatcher
|
||||
* @param \Joomla\CMS\Input\Input|null $input The Input object for the request
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
|
||||
{
|
||||
parent::__construct($config, $factory, $app, $input);
|
||||
|
||||
$this->registerTask('apply', 'save');
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to handle cancel
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function cancel()
|
||||
{
|
||||
// Redirect back to home(base) page
|
||||
$this->setRedirect(Uri::base());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to save module editing.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
// Check for request forgeries.
|
||||
$this->checkToken();
|
||||
|
||||
// Check if the user is authorized to do this.
|
||||
$user = $this->app->getIdentity();
|
||||
|
||||
if (!$user->authorise('module.edit.frontend', 'com_modules.module.' . $this->input->get('id'))) {
|
||||
$this->app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
|
||||
$this->app->redirect('index.php');
|
||||
}
|
||||
|
||||
// Set FTP credentials, if given.
|
||||
ClientHelper::setCredentialsFromRequest('ftp');
|
||||
|
||||
// Get submitted module id
|
||||
$moduleId = '&id=' . $this->input->getInt('id');
|
||||
|
||||
// Get returnUri
|
||||
$returnUri = $this->input->post->get('return', null, 'base64');
|
||||
$redirect = '';
|
||||
|
||||
if (!empty($returnUri)) {
|
||||
$redirect = '&return=' . $returnUri;
|
||||
}
|
||||
|
||||
/** @var AdministratorApplication $app */
|
||||
$app = Factory::getContainer()->get(AdministratorApplication::class);
|
||||
|
||||
// Reset Uri cache.
|
||||
Uri::reset();
|
||||
|
||||
// Get a document object
|
||||
$document = $this->app->getDocument();
|
||||
|
||||
// Load application dependencies.
|
||||
$app->loadLanguage($this->app->getLanguage());
|
||||
$app->loadDocument($document);
|
||||
$app->loadIdentity($user);
|
||||
|
||||
/** @var \Joomla\CMS\Dispatcher\ComponentDispatcher $dispatcher */
|
||||
$dispatcher = $app->bootComponent('com_modules')->getDispatcher($app);
|
||||
|
||||
/** @var ModuleController $controllerClass */
|
||||
$controllerClass = $dispatcher->getController('Module');
|
||||
|
||||
// Set backend required params
|
||||
$document->setType('json');
|
||||
|
||||
// Execute backend controller
|
||||
Form::addFormPath(JPATH_ADMINISTRATOR . '/components/com_modules/forms');
|
||||
$return = $controllerClass->save();
|
||||
|
||||
// Reset params back after requesting from service
|
||||
$document->setType('html');
|
||||
|
||||
// Check the return value.
|
||||
if ($return === false) {
|
||||
// Save the data in the session.
|
||||
$data = $this->input->post->get('jform', [], 'array');
|
||||
|
||||
$this->app->setUserState('com_config.modules.global.data', $data);
|
||||
|
||||
// Save failed, go back to the screen and display a notice.
|
||||
$this->app->enqueueMessage(Text::_('JERROR_SAVE_FAILED'));
|
||||
$this->app->redirect(Route::_('index.php?option=com_config&view=modules' . $moduleId . $redirect, false));
|
||||
}
|
||||
|
||||
// Redirect back to com_config display
|
||||
$this->app->enqueueMessage(Text::_('COM_CONFIG_MODULES_SAVE_SUCCESS'), 'success');
|
||||
|
||||
// Set the redirect based on the task.
|
||||
switch ($this->input->getCmd('task')) {
|
||||
case 'apply':
|
||||
$this->app->redirect(Route::_('index.php?option=com_config&view=modules' . $moduleId . $redirect, false));
|
||||
break;
|
||||
|
||||
case 'save':
|
||||
default:
|
||||
if (!empty($returnUri)) {
|
||||
$redirect = base64_decode(urldecode($returnUri));
|
||||
|
||||
// Don't redirect to an external URL.
|
||||
if (!Uri::isInternal($redirect)) {
|
||||
$redirect = Uri::base();
|
||||
}
|
||||
} else {
|
||||
$redirect = Uri::base();
|
||||
}
|
||||
|
||||
$this->setRedirect($redirect);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
121
components/com_config/src/Controller/TemplatesController.php
Normal file
121
components/com_config/src/Controller/TemplatesController.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Controller;
|
||||
|
||||
use Joomla\CMS\Application\CMSApplication;
|
||||
use Joomla\CMS\Client\ClientHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\MVC\Controller\BaseController;
|
||||
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Component Controller
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
class TemplatesController extends BaseController
|
||||
{
|
||||
/**
|
||||
* @param array $config An optional associative array of configuration settings.
|
||||
* Recognized key values include 'name', 'default_task', 'model_path', and
|
||||
* 'view_path' (this list is not meant to be comprehensive).
|
||||
* @param MVCFactoryInterface|null $factory The factory.
|
||||
* @param CMSApplication|null $app The Application for the dispatcher
|
||||
* @param \Joomla\CMS\Input\Input|null $input The Input object for the request
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
|
||||
{
|
||||
parent::__construct($config, $factory, $app, $input);
|
||||
|
||||
// Apply, Save & New, and Save As copy should be standard on forms.
|
||||
$this->registerTask('apply', 'save');
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to handle cancel
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function cancel()
|
||||
{
|
||||
// Redirect back to home(base) page
|
||||
$this->setRedirect(Uri::base());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to save global configuration.
|
||||
*
|
||||
* @return boolean True on success.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
// Check for request forgeries.
|
||||
$this->checkToken();
|
||||
|
||||
// Check if the user is authorized to do this.
|
||||
if (!$this->app->getIdentity()->authorise('core.admin')) {
|
||||
$this->setRedirect('index.php', Text::_('JERROR_ALERTNOAUTHOR'));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set FTP credentials, if given.
|
||||
ClientHelper::setCredentialsFromRequest('ftp');
|
||||
|
||||
$app = $this->app;
|
||||
|
||||
// Access backend com_templates
|
||||
$controllerClass = $app->bootComponent('com_templates')
|
||||
->getMVCFactory()->createController('Style', 'Administrator', [], $app, $app->getInput());
|
||||
|
||||
// Get a document object
|
||||
$document = $app->getDocument();
|
||||
|
||||
// Set backend required params
|
||||
$document->setType('json');
|
||||
$this->input->set('id', $app->getTemplate(true)->id);
|
||||
|
||||
// Execute backend controller
|
||||
$return = $controllerClass->save();
|
||||
|
||||
// Reset params back after requesting from service
|
||||
$document->setType('html');
|
||||
|
||||
// Check the return value.
|
||||
if ($return === false) {
|
||||
// Save failed, go back to the screen and display a notice.
|
||||
$this->setMessage(Text::sprintf('JERROR_SAVE_FAILED'), 'error');
|
||||
$this->setRedirect(Route::_('index.php?option=com_config&view=templates', false));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set the success message.
|
||||
$this->setMessage(Text::_('COM_CONFIG_SAVE_SUCCESS'));
|
||||
|
||||
// Redirect back to com_config display
|
||||
$this->setRedirect(Route::_('index.php?option=com_config&view=templates', false));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
52
components/com_config/src/Dispatcher/Dispatcher.php
Normal file
52
components/com_config/src/Dispatcher/Dispatcher.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Dispatcher;
|
||||
|
||||
use Joomla\CMS\Access\Exception\NotAllowed;
|
||||
use Joomla\CMS\Dispatcher\ComponentDispatcher;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* ComponentDispatcher class for com_config
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
class Dispatcher extends ComponentDispatcher
|
||||
{
|
||||
/**
|
||||
* Method to check component access permission
|
||||
*
|
||||
* @since 4.0.0
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \Exception|NotAllowed
|
||||
*/
|
||||
protected function checkAccess()
|
||||
{
|
||||
parent::checkAccess();
|
||||
|
||||
$task = $this->input->getCmd('task', 'display');
|
||||
$view = $this->input->get('view');
|
||||
$user = $this->app->getIdentity();
|
||||
|
||||
if (substr($task, 0, 8) === 'modules.' || $view === 'modules') {
|
||||
if (!$user->authorise('module.edit.frontend', 'com_modules.module.' . $this->input->get('id'))) {
|
||||
throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
|
||||
}
|
||||
} elseif (!$user->authorise('core.admin')) {
|
||||
throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
|
||||
}
|
||||
}
|
||||
}
|
||||
45
components/com_config/src/Model/ConfigModel.php
Normal file
45
components/com_config/src/Model/ConfigModel.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Model;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Model for the global configuration
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
class ConfigModel extends FormModel
|
||||
{
|
||||
/**
|
||||
* Method to get a form object.
|
||||
*
|
||||
* @param array $data Data for the form.
|
||||
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
|
||||
*
|
||||
* @return mixed A JForm object on success, false on failure
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function getForm($data = [], $loadData = true)
|
||||
{
|
||||
// Get the form.
|
||||
$form = $this->loadForm('com_config.config', 'config', ['control' => 'jform', 'load_data' => $loadData]);
|
||||
|
||||
if (empty($form)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $form;
|
||||
}
|
||||
}
|
||||
271
components/com_config/src/Model/FormModel.php
Normal file
271
components/com_config/src/Model/FormModel.php
Normal file
@ -0,0 +1,271 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Model;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Form\Form;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\MVC\Model\FormModel as BaseForm;
|
||||
use Joomla\CMS\Plugin\PluginHelper;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Prototype form model.
|
||||
*
|
||||
* @see JForm
|
||||
* @see \Joomla\CMS\Form\FormField
|
||||
* @see \Joomla\CMS\Form\FormRule
|
||||
* @since 3.2
|
||||
*/
|
||||
abstract class FormModel extends BaseForm
|
||||
{
|
||||
/**
|
||||
* Array of form objects.
|
||||
*
|
||||
* @var array
|
||||
* @since 3.2
|
||||
*/
|
||||
protected $forms = [];
|
||||
|
||||
/**
|
||||
* Method to checkin a row.
|
||||
*
|
||||
* @param integer $pk The numeric id of the primary key.
|
||||
*
|
||||
* @return boolean False on failure or error, true otherwise.
|
||||
*
|
||||
* @since 3.2
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public function checkin($pk = null)
|
||||
{
|
||||
// Only attempt to check the row in if it exists.
|
||||
if ($pk) {
|
||||
$user = $this->getCurrentUser();
|
||||
|
||||
// Get an instance of the row to checkin.
|
||||
$table = $this->getTable();
|
||||
|
||||
if (!$table->load($pk)) {
|
||||
throw new \RuntimeException($table->getError());
|
||||
}
|
||||
|
||||
// Check if this is the user has previously checked out the row.
|
||||
if (!\is_null($table->checked_out) && $table->checked_out != $user->get('id') && !$user->authorise('core.admin', 'com_checkin')) {
|
||||
throw new \RuntimeException($table->getError());
|
||||
}
|
||||
|
||||
// Attempt to check the row in.
|
||||
if (!$table->checkIn($pk)) {
|
||||
throw new \RuntimeException($table->getError());
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to check-out a row for editing.
|
||||
*
|
||||
* @param integer $pk The numeric id of the primary key.
|
||||
*
|
||||
* @return boolean False on failure or error, true otherwise.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function checkout($pk = null)
|
||||
{
|
||||
// Only attempt to check the row in if it exists.
|
||||
if ($pk) {
|
||||
$user = $this->getCurrentUser();
|
||||
|
||||
// Get an instance of the row to checkout.
|
||||
$table = $this->getTable();
|
||||
|
||||
if (!$table->load($pk)) {
|
||||
throw new \RuntimeException($table->getError());
|
||||
}
|
||||
|
||||
// Check if this is the user having previously checked out the row.
|
||||
if (!\is_null($table->checked_out) && $table->checked_out != $user->get('id')) {
|
||||
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CHECKOUT_USER_MISMATCH'));
|
||||
}
|
||||
|
||||
// Attempt to check the row out.
|
||||
if (!$table->checkOut($user->get('id'), $pk)) {
|
||||
throw new \RuntimeException($table->getError());
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get a form object.
|
||||
*
|
||||
* @param string $name The name of the form.
|
||||
* @param string $source The form source. Can be XML string if file flag is set to false.
|
||||
* @param array $options Optional array of options for the form creation.
|
||||
* @param boolean $clear Optional argument to force load a new form.
|
||||
* @param string $xpath An optional xpath to search for the fields.
|
||||
*
|
||||
* @return mixed JForm object on success, False on error.
|
||||
*
|
||||
* @see JForm
|
||||
* @since 3.2
|
||||
*/
|
||||
protected function loadForm($name, $source = null, $options = [], $clear = false, $xpath = false)
|
||||
{
|
||||
// Handle the optional arguments.
|
||||
$options['control'] = ArrayHelper::getValue($options, 'control', false);
|
||||
|
||||
// Create a signature hash.
|
||||
$hash = sha1($source . serialize($options));
|
||||
|
||||
// Check if we can use a previously loaded form.
|
||||
if (isset($this->_forms[$hash]) && !$clear) {
|
||||
return $this->_forms[$hash];
|
||||
}
|
||||
|
||||
// Register the paths for the form.
|
||||
Form::addFormPath(JPATH_SITE . '/components/com_config/forms');
|
||||
Form::addFormPath(JPATH_ADMINISTRATOR . '/components/com_config/forms');
|
||||
|
||||
try {
|
||||
// Get the form.
|
||||
$form = Form::getInstance($name, $source, $options, false, $xpath);
|
||||
|
||||
if (isset($options['load_data']) && $options['load_data']) {
|
||||
// Get the data for the form.
|
||||
$data = $this->loadFormData();
|
||||
} else {
|
||||
$data = [];
|
||||
}
|
||||
|
||||
// Allow for additional modification of the form, and events to be triggered.
|
||||
// We pass the data because plugins may require it.
|
||||
$this->preprocessForm($form, $data);
|
||||
|
||||
// Load the data into the form after the plugins have operated.
|
||||
$form->bind($data);
|
||||
} catch (\Exception $e) {
|
||||
Factory::getApplication()->enqueueMessage($e->getMessage());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Store the form for later.
|
||||
$this->_forms[$hash] = $form;
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the data that should be injected in the form.
|
||||
*
|
||||
* @return array The default data is an empty array.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
protected function loadFormData()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to allow derived classes to preprocess the data.
|
||||
*
|
||||
* @param string $context The context identifier.
|
||||
* @param mixed &$data The data to be processed. It gets altered directly.
|
||||
* @param string $group The name of the plugin group to import (defaults to "content").
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
protected function preprocessData($context, &$data, $group = 'content')
|
||||
{
|
||||
// Get the dispatcher and load the users plugins.
|
||||
PluginHelper::importPlugin('content');
|
||||
|
||||
// Trigger the data preparation event.
|
||||
Factory::getApplication()->triggerEvent('onContentPrepareData', [$context, $data]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to allow derived classes to preprocess the form.
|
||||
*
|
||||
* @param Form $form A Form object.
|
||||
* @param mixed $data The data expected for the form.
|
||||
* @param string $group The name of the plugin group to import (defaults to "content").
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @see \Joomla\CMS\Form\FormField
|
||||
* @since 3.2
|
||||
* @throws \Exception if there is an error in the form event.
|
||||
*/
|
||||
protected function preprocessForm(Form $form, $data, $group = 'content')
|
||||
{
|
||||
// Import the appropriate plugin group.
|
||||
PluginHelper::importPlugin($group);
|
||||
|
||||
// Trigger the form preparation event.
|
||||
Factory::getApplication()->triggerEvent('onContentPrepareForm', [$form, $data]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to validate the form data.
|
||||
*
|
||||
* @param Form $form The form to validate against.
|
||||
* @param array $data The data to validate.
|
||||
* @param string $group The name of the field group to validate.
|
||||
*
|
||||
* @return mixed Array of filtered data if valid, false otherwise.
|
||||
*
|
||||
* @see \Joomla\CMS\Form\FormRule
|
||||
* @see \Joomla\CMS\Filter\InputFilter
|
||||
* @since 3.2
|
||||
*/
|
||||
public function validate($form, $data, $group = null)
|
||||
{
|
||||
// Filter and validate the form data.
|
||||
$data = $form->filter($data);
|
||||
$return = $form->validate($data, $group);
|
||||
|
||||
// Check for an error.
|
||||
if ($return instanceof \Exception) {
|
||||
Factory::getApplication()->enqueueMessage($return->getMessage(), 'error');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check the validation results.
|
||||
if ($return === false) {
|
||||
// Get the validation messages from the form.
|
||||
foreach ($form->getErrors() as $message) {
|
||||
if ($message instanceof \Exception) {
|
||||
$message = $message->getMessage();
|
||||
}
|
||||
|
||||
Factory::getApplication()->enqueueMessage($message, 'error');
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
253
components/com_config/src/Model/ModulesModel.php
Normal file
253
components/com_config/src/Model/ModulesModel.php
Normal file
@ -0,0 +1,253 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2014 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Model;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Form\Form;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\Filesystem\Path;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Config Module model.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
class ModulesModel extends FormModel
|
||||
{
|
||||
/**
|
||||
* Method to auto-populate the model state.
|
||||
*
|
||||
* Note. Calling getState in this method will result in recursion.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
protected function populateState()
|
||||
{
|
||||
$app = Factory::getApplication();
|
||||
|
||||
// Load the User state.
|
||||
$pk = $app->getInput()->getInt('id');
|
||||
|
||||
$this->setState('module.id', $pk);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the record form.
|
||||
*
|
||||
* @param array $data Data for the form.
|
||||
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
|
||||
*
|
||||
* @return Form A Form object on success, false on failure
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function getForm($data = [], $loadData = true)
|
||||
{
|
||||
// Get the form.
|
||||
$form = $this->loadForm('com_config.modules', 'modules', ['control' => 'jform', 'load_data' => $loadData]);
|
||||
|
||||
if (empty($form)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to preprocess the form
|
||||
*
|
||||
* @param Form $form A form object.
|
||||
* @param mixed $data The data expected for the form.
|
||||
* @param string $group The name of the plugin group to import (defaults to "content").
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
* @throws \Exception if there is an error loading the form.
|
||||
*/
|
||||
protected function preprocessForm(Form $form, $data, $group = 'content')
|
||||
{
|
||||
$lang = Factory::getLanguage();
|
||||
$module = $this->getState()->get('module.name');
|
||||
$basePath = JPATH_BASE;
|
||||
|
||||
$formFile = Path::clean($basePath . '/modules/' . $module . '/' . $module . '.xml');
|
||||
|
||||
// Load the core and/or local language file(s).
|
||||
$lang->load($module, $basePath)
|
||||
|| $lang->load($module, $basePath . '/modules/' . $module);
|
||||
|
||||
if (file_exists($formFile)) {
|
||||
// Get the module form.
|
||||
if (!$form->loadFile($formFile, false, '//config')) {
|
||||
throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
|
||||
}
|
||||
|
||||
// Attempt to load the xml file.
|
||||
if (!$xml = simplexml_load_file($formFile)) {
|
||||
throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
|
||||
}
|
||||
}
|
||||
|
||||
// Load the default advanced params
|
||||
Form::addFormPath(JPATH_BASE . '/components/com_config/model/form');
|
||||
$form->loadFile('modules_advanced', false);
|
||||
|
||||
// Trigger the default form events.
|
||||
parent::preprocessForm($form, $data, $group);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get list of module positions in current template
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function getPositions()
|
||||
{
|
||||
$lang = Factory::getLanguage();
|
||||
$templateName = Factory::getApplication()->getTemplate();
|
||||
|
||||
// Load templateDetails.xml file
|
||||
$path = Path::clean(JPATH_BASE . '/templates/' . $templateName . '/templateDetails.xml');
|
||||
$currentTemplatePositions = [];
|
||||
|
||||
if (file_exists($path)) {
|
||||
$xml = simplexml_load_file($path);
|
||||
|
||||
if (isset($xml->positions[0])) {
|
||||
// Load language files
|
||||
$lang->load('tpl_' . $templateName . '.sys', JPATH_BASE)
|
||||
|| $lang->load('tpl_' . $templateName . '.sys', JPATH_BASE . '/templates/' . $templateName);
|
||||
|
||||
foreach ($xml->positions[0] as $position) {
|
||||
$value = (string) $position;
|
||||
$text = preg_replace('/[^a-zA-Z0-9_\-]/', '_', 'TPL_' . strtoupper($templateName) . '_POSITION_' . strtoupper($value));
|
||||
|
||||
// Construct list of positions
|
||||
$currentTemplatePositions[] = self::createOption($value, Text::_($text) . ' [' . $value . ']');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$templateGroups = [];
|
||||
|
||||
// Add an empty value to be able to deselect a module position
|
||||
$option = self::createOption();
|
||||
$templateGroups[''] = self::createOptionGroup('', [$option]);
|
||||
|
||||
$templateGroups[$templateName] = self::createOptionGroup($templateName, $currentTemplatePositions);
|
||||
|
||||
// Add custom position to options
|
||||
$customGroupText = Text::_('COM_MODULES_CUSTOM_POSITION');
|
||||
|
||||
$editPositions = true;
|
||||
$customPositions = self::getActivePositions(0, $editPositions);
|
||||
$templateGroups[$customGroupText] = self::createOptionGroup($customGroupText, $customPositions);
|
||||
|
||||
return $templateGroups;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of modules positions
|
||||
*
|
||||
* @param integer $clientId Client ID
|
||||
* @param boolean $editPositions Allow to edit the positions
|
||||
*
|
||||
* @return array A list of positions
|
||||
*
|
||||
* @since 3.6.3
|
||||
*/
|
||||
public static function getActivePositions($clientId, $editPositions = false)
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true)
|
||||
->select('DISTINCT position')
|
||||
->from($db->quoteName('#__modules'))
|
||||
->where($db->quoteName('client_id') . ' = ' . (int) $clientId)
|
||||
->order($db->quoteName('position'));
|
||||
|
||||
$db->setQuery($query);
|
||||
|
||||
try {
|
||||
$positions = $db->loadColumn();
|
||||
$positions = \is_array($positions) ? $positions : [];
|
||||
} catch (\RuntimeException $e) {
|
||||
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Build the list
|
||||
$options = [];
|
||||
|
||||
foreach ($positions as $position) {
|
||||
if (!$position && !$editPositions) {
|
||||
$options[] = HTMLHelper::_('select.option', 'none', ':: ' . Text::_('JNONE') . ' ::');
|
||||
} else {
|
||||
$options[] = HTMLHelper::_('select.option', $position, $position);
|
||||
}
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and return a new Option
|
||||
*
|
||||
* @param string $value The option value [optional]
|
||||
* @param string $text The option text [optional]
|
||||
*
|
||||
* @return object The option as an object (stdClass instance)
|
||||
*
|
||||
* @since 3.6.3
|
||||
*/
|
||||
private static function createOption($value = '', $text = '')
|
||||
{
|
||||
if (empty($text)) {
|
||||
$text = $value;
|
||||
}
|
||||
|
||||
$option = new \stdClass();
|
||||
$option->value = $value;
|
||||
$option->text = $text;
|
||||
|
||||
return $option;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and return a new Option Group
|
||||
*
|
||||
* @param string $label Value and label for group [optional]
|
||||
* @param array $options Array of options to insert into group [optional]
|
||||
*
|
||||
* @return array Return the new group as an array
|
||||
*
|
||||
* @since 3.6.3
|
||||
*/
|
||||
private static function createOptionGroup($label = '', $options = [])
|
||||
{
|
||||
$group = [];
|
||||
$group['value'] = $label;
|
||||
$group['text'] = $label;
|
||||
$group['items'] = $options;
|
||||
|
||||
return $group;
|
||||
}
|
||||
}
|
||||
123
components/com_config/src/Model/TemplatesModel.php
Normal file
123
components/com_config/src/Model/TemplatesModel.php
Normal file
@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Model;
|
||||
|
||||
use Joomla\CMS\Component\ComponentHelper;
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Form\Form;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\Filesystem\Path;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Template style model.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
class TemplatesModel extends FormModel
|
||||
{
|
||||
/**
|
||||
* Method to auto-populate the model state.
|
||||
*
|
||||
* Note. Calling getState in this method will result in recursion.
|
||||
*
|
||||
* @return null
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
protected function populateState()
|
||||
{
|
||||
parent::populateState();
|
||||
|
||||
$this->setState('params', ComponentHelper::getParams('com_templates'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the record form.
|
||||
*
|
||||
* @param array $data An optional array of data for the form to interrogate.
|
||||
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
|
||||
*
|
||||
* @return Form|bool A JForm object on success, false on failure
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function getForm($data = [], $loadData = true)
|
||||
{
|
||||
try {
|
||||
// Get the form.
|
||||
$form = $this->loadForm('com_config.templates', 'templates', ['load_data' => $loadData]);
|
||||
|
||||
$data = [];
|
||||
$this->preprocessForm($form, $data);
|
||||
|
||||
// Load the data into the form
|
||||
$form->bind($data);
|
||||
} catch (\Exception $e) {
|
||||
Factory::getApplication()->enqueueMessage($e->getMessage());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($form)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to preprocess the form
|
||||
*
|
||||
* @param Form $form A form object.
|
||||
* @param mixed $data The data expected for the form.
|
||||
* @param string $group Plugin group to load
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
* @throws \Exception if there is an error in the form event.
|
||||
*/
|
||||
protected function preprocessForm(Form $form, $data, $group = 'content')
|
||||
{
|
||||
$lang = Factory::getLanguage();
|
||||
|
||||
$template = Factory::getApplication()->getTemplate();
|
||||
|
||||
// Load the core and/or local language file(s).
|
||||
$lang->load('tpl_' . $template, JPATH_BASE)
|
||||
|| $lang->load('tpl_' . $template, JPATH_BASE . '/templates/' . $template);
|
||||
|
||||
// Look for com_config.xml, which contains fields to display
|
||||
$formFile = Path::clean(JPATH_BASE . '/templates/' . $template . '/com_config.xml');
|
||||
|
||||
if (!file_exists($formFile)) {
|
||||
// If com_config.xml not found, fall back to templateDetails.xml
|
||||
$formFile = Path::clean(JPATH_BASE . '/templates/' . $template . '/templateDetails.xml');
|
||||
}
|
||||
|
||||
// Get the template form.
|
||||
if (file_exists($formFile) && !$form->loadFile($formFile, false, '//config')) {
|
||||
throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
|
||||
}
|
||||
|
||||
// Attempt to load the xml file.
|
||||
if (!$xml = simplexml_load_file($formFile)) {
|
||||
throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
|
||||
}
|
||||
|
||||
// Trigger the default form events.
|
||||
parent::preprocessForm($form, $data, $group);
|
||||
}
|
||||
}
|
||||
49
components/com_config/src/Service/Router.php
Normal file
49
components/com_config/src/Service/Router.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\Service;
|
||||
|
||||
use Joomla\CMS\Application\SiteApplication;
|
||||
use Joomla\CMS\Component\Router\RouterView;
|
||||
use Joomla\CMS\Component\Router\RouterViewConfiguration;
|
||||
use Joomla\CMS\Component\Router\Rules\MenuRules;
|
||||
use Joomla\CMS\Component\Router\Rules\NomenuRules;
|
||||
use Joomla\CMS\Component\Router\Rules\StandardRules;
|
||||
use Joomla\CMS\Menu\AbstractMenu;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Routing class from com_config
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
class Router extends RouterView
|
||||
{
|
||||
/**
|
||||
* Config Component router constructor
|
||||
*
|
||||
* @param SiteApplication $app The application object
|
||||
* @param AbstractMenu $menu The menu object to work with
|
||||
*/
|
||||
public function __construct(SiteApplication $app, AbstractMenu $menu)
|
||||
{
|
||||
$this->registerView(new RouterViewConfiguration('config'));
|
||||
$this->registerView(new RouterViewConfiguration('templates'));
|
||||
|
||||
parent::__construct($app, $menu);
|
||||
|
||||
$this->attachRule(new MenuRules($this));
|
||||
$this->attachRule(new StandardRules($this));
|
||||
$this->attachRule(new NomenuRules($this));
|
||||
}
|
||||
}
|
||||
135
components/com_config/src/View/Config/HtmlView.php
Normal file
135
components/com_config/src/View/Config/HtmlView.php
Normal file
@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\View\Config;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
|
||||
use Joomla\Component\Config\Administrator\Controller\RequestController;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* View for the global configuration
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
class HtmlView extends BaseHtmlView
|
||||
{
|
||||
/**
|
||||
* The form object
|
||||
*
|
||||
* @var \Joomla\CMS\Form\Form
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public $form;
|
||||
|
||||
/**
|
||||
* The data to be displayed in the form
|
||||
*
|
||||
* @var array
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public $data;
|
||||
|
||||
/**
|
||||
* Is the current user a super administrator?
|
||||
*
|
||||
* @var boolean
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
protected $userIsSuperAdmin;
|
||||
|
||||
/**
|
||||
* The page class suffix
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
protected $pageclass_sfx = '';
|
||||
|
||||
/**
|
||||
* The page parameters
|
||||
*
|
||||
* @var \Joomla\Registry\Registry|null
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
protected $params = null;
|
||||
|
||||
/**
|
||||
* Execute and display a template script.
|
||||
*
|
||||
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function display($tpl = null)
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
$this->userIsSuperAdmin = $user->authorise('core.admin');
|
||||
|
||||
// Access backend com_config
|
||||
$requestController = new RequestController();
|
||||
|
||||
// Execute backend controller
|
||||
$serviceData = json_decode($requestController->getJson(), true);
|
||||
|
||||
$form = $this->getForm();
|
||||
|
||||
if ($form) {
|
||||
$form->bind($serviceData);
|
||||
}
|
||||
|
||||
$this->form = $form;
|
||||
$this->data = $serviceData;
|
||||
|
||||
$this->_prepareDocument();
|
||||
|
||||
parent::display($tpl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares the document.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
protected function _prepareDocument()
|
||||
{
|
||||
$params = Factory::getApplication()->getParams();
|
||||
|
||||
// Because the application sets a default page title, we need to get it
|
||||
// right from the menu item itself
|
||||
|
||||
$this->setDocumentTitle($params->get('page_title', ''));
|
||||
|
||||
if ($params->get('menu-meta_description')) {
|
||||
$this->getDocument()->setDescription($params->get('menu-meta_description'));
|
||||
}
|
||||
|
||||
if ($params->get('robots')) {
|
||||
$this->getDocument()->setMetaData('robots', $params->get('robots'));
|
||||
}
|
||||
|
||||
// Escape strings for HTML output
|
||||
$this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));
|
||||
$this->params = &$params;
|
||||
}
|
||||
}
|
||||
100
components/com_config/src/View/Modules/HtmlView.php
Normal file
100
components/com_config/src/View/Modules/HtmlView.php
Normal file
@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\View\Modules;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Form\Form;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* View to edit a module.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
class HtmlView extends BaseHtmlView
|
||||
{
|
||||
/**
|
||||
* The module to be rendered
|
||||
*
|
||||
* @var array
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public $item;
|
||||
|
||||
/**
|
||||
* The form object
|
||||
*
|
||||
* @var Form
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public $form;
|
||||
|
||||
/**
|
||||
* Execute and display a template script.
|
||||
*
|
||||
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function display($tpl = null)
|
||||
{
|
||||
$lang = Factory::getApplication()->getLanguage();
|
||||
$lang->load('', JPATH_ADMINISTRATOR, $lang->getTag());
|
||||
$lang->load('com_modules', JPATH_ADMINISTRATOR, $lang->getTag());
|
||||
|
||||
// @todo Move and clean up
|
||||
$module = (new \Joomla\Component\Modules\Administrator\Model\ModuleModel())->getItem(Factory::getApplication()->getInput()->getInt('id'));
|
||||
|
||||
$moduleData = $module->getProperties();
|
||||
unset($moduleData['xml']);
|
||||
|
||||
/** @var \Joomla\Component\Config\Site\Model\ModulesModel $model */
|
||||
$model = $this->getModel();
|
||||
|
||||
// Need to add module name to the state of model
|
||||
$model->getState()->set('module.name', $moduleData['module']);
|
||||
|
||||
/** @var Form form */
|
||||
$this->form = $this->get('form');
|
||||
$this->positions = $this->get('positions');
|
||||
$this->item = $moduleData;
|
||||
|
||||
if ($this->form) {
|
||||
$this->form->bind($moduleData);
|
||||
}
|
||||
|
||||
$this->_prepareDocument();
|
||||
|
||||
parent::display($tpl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares the document.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
protected function _prepareDocument()
|
||||
{
|
||||
// There is no menu item for this so we have to use the title from the component
|
||||
$this->setDocumentTitle(Text::_('COM_CONFIG_MODULES_SETTINGS_TITLE'));
|
||||
}
|
||||
}
|
||||
158
components/com_config/src/View/Templates/HtmlView.php
Normal file
158
components/com_config/src/View/Templates/HtmlView.php
Normal file
@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Component\Config\Site\View\Templates;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Form\Form;
|
||||
use Joomla\CMS\MVC\Factory\MVCFactory;
|
||||
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
|
||||
use Joomla\Component\Config\Administrator\Controller\RequestController;
|
||||
use Joomla\Component\Templates\Administrator\View\Style\JsonView;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* View to edit a template style.
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
class HtmlView extends BaseHtmlView
|
||||
{
|
||||
/**
|
||||
* The data to be displayed in the form
|
||||
*
|
||||
* @var array
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public $item;
|
||||
|
||||
/**
|
||||
* The form object
|
||||
*
|
||||
* @var Form
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public $form;
|
||||
|
||||
/**
|
||||
* Is the current user a super administrator?
|
||||
*
|
||||
* @var boolean
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
protected $userIsSuperAdmin;
|
||||
|
||||
/**
|
||||
* The page class suffix
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
protected $pageclass_sfx = '';
|
||||
|
||||
/**
|
||||
* The page parameters
|
||||
*
|
||||
* @var \Joomla\Registry\Registry|null
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
protected $params = null;
|
||||
|
||||
/**
|
||||
* Method to render the view.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 3.2
|
||||
*/
|
||||
public function display($tpl = null)
|
||||
{
|
||||
$user = $this->getCurrentUser();
|
||||
$this->userIsSuperAdmin = $user->authorise('core.admin');
|
||||
|
||||
$app = Factory::getApplication();
|
||||
|
||||
$app->getInput()->set('id', $app->getTemplate(true)->id);
|
||||
|
||||
/** @var MVCFactory $factory */
|
||||
$factory = $app->bootComponent('com_templates')->getMVCFactory();
|
||||
|
||||
/** @var JsonView $view */
|
||||
$view = $factory->createView('Style', 'Administrator', 'Json');
|
||||
$view->setModel($factory->createModel('Style', 'Administrator'), true);
|
||||
$view->setLanguage($app->getLanguage());
|
||||
|
||||
$view->document = $this->getDocument();
|
||||
|
||||
$json = $view->display();
|
||||
|
||||
// Execute backend controller
|
||||
$serviceData = json_decode($json, true);
|
||||
|
||||
// Access backend com_config
|
||||
$requestController = new RequestController();
|
||||
|
||||
// Execute backend controller
|
||||
$configData = json_decode($requestController->getJson(), true);
|
||||
|
||||
$data = array_merge($configData, $serviceData);
|
||||
|
||||
/** @var Form $form */
|
||||
$form = $this->getForm();
|
||||
|
||||
if ($form) {
|
||||
$form->bind($data);
|
||||
}
|
||||
|
||||
$this->form = $form;
|
||||
|
||||
$this->data = $serviceData;
|
||||
|
||||
$this->_prepareDocument();
|
||||
|
||||
parent::display($tpl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares the document.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
protected function _prepareDocument()
|
||||
{
|
||||
$params = Factory::getApplication()->getParams();
|
||||
|
||||
// Because the application sets a default page title, we need to get it
|
||||
// right from the menu item itself
|
||||
$this->setDocumentTitle($params->get('page_title', ''));
|
||||
|
||||
if ($params->get('menu-meta_description')) {
|
||||
$this->getDocument()->setDescription($params->get('menu-meta_description'));
|
||||
}
|
||||
|
||||
if ($params->get('robots')) {
|
||||
$this->getDocument()->setMetaData('robots', $params->get('robots'));
|
||||
}
|
||||
|
||||
// Escape strings for HTML output
|
||||
$this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));
|
||||
$this->params = &$params;
|
||||
}
|
||||
}
|
||||
63
components/com_config/tmpl/config/default.php
Normal file
63
components/com_config/tmpl/config/default.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate')
|
||||
->useScript('com_config.config')
|
||||
->useScript('inlinehelp');
|
||||
|
||||
?>
|
||||
<?php if ($this->params->get('show_page_heading')) : ?>
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
<?php if ($this->escape($this->params->get('page_heading'))) : ?>
|
||||
<?php echo $this->escape($this->params->get('page_heading')); ?>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($this->params->get('page_title')); ?>
|
||||
<?php endif; ?>
|
||||
</h1>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" id="application-form" method="post" name="adminForm" class="form-validate">
|
||||
|
||||
<div class="mb-2 d-flex">
|
||||
<button type="button" class="btn btn-sm btn-outline-info button-inlinehelp ms-auto">
|
||||
<span class="fa fa-question-circle" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JINLINEHELP') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<?php echo $this->loadTemplate('site'); ?>
|
||||
<?php echo $this->loadTemplate('seo'); ?>
|
||||
<?php echo $this->loadTemplate('metadata'); ?>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
|
||||
<div class="mb-2">
|
||||
<button type="button" class="btn btn-primary" data-submit-task="config.apply">
|
||||
<span class="icon-check" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JSAVE') ?>
|
||||
</button>
|
||||
<button type="button" class="btn btn-danger" data-submit-task="config.cancel">
|
||||
<span class="icon-times" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JCANCEL') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
20
components/com_config/tmpl/config/default.xml
Normal file
20
components/com_config/tmpl/config/default.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_CONFIG_CONFIG_VIEW_DEFAULT_TITLE" option="COM_CONFIG_CONFIG_VIEW_DEFAULT_OPTION">
|
||||
<help
|
||||
key = "Menu_Item:_Site_Configuration_Options"
|
||||
/>
|
||||
<message>
|
||||
<![CDATA[COM_CONFIG_CONFIG_VIEW_DEFAULT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
<fields name="request">
|
||||
<fieldset name="request">
|
||||
<field
|
||||
name="controller"
|
||||
type="hidden"
|
||||
default=""
|
||||
/>
|
||||
</fieldset>
|
||||
</fields>
|
||||
</metadata>
|
||||
32
components/com_config/tmpl/config/default_metadata.php
Normal file
32
components/com_config/tmpl/config/default_metadata.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
|
||||
<legend><?php echo Text::_('COM_CONFIG_METADATA_SETTINGS'); ?></legend>
|
||||
|
||||
<?php foreach ($this->form->getFieldset('metadata') as $field) : ?>
|
||||
<div class="mb-3">
|
||||
<?php echo $field->label; ?>
|
||||
<?php echo $field->input; ?>
|
||||
<?php if ($field->description) : ?>
|
||||
<div class="form-text hide-aware-inline-help d-none" id="<?php echo $field->id ?>-desc">
|
||||
<?php echo Text::_($field->description) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
</fieldset>
|
||||
32
components/com_config/tmpl/config/default_seo.php
Normal file
32
components/com_config/tmpl/config/default_seo.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
|
||||
<legend><?php echo Text::_('COM_CONFIG_SEO_SETTINGS'); ?></legend>
|
||||
|
||||
<?php foreach ($this->form->getFieldset('seo') as $field) : ?>
|
||||
<div class="mb-3">
|
||||
<?php echo $field->label; ?>
|
||||
<?php echo $field->input; ?>
|
||||
<?php if ($field->description) : ?>
|
||||
<div class="form-text hide-aware-inline-help d-none" id="<?php echo $field->id ?>-desc">
|
||||
<?php echo Text::_($field->description) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
</fieldset>
|
||||
32
components/com_config/tmpl/config/default_site.php
Normal file
32
components/com_config/tmpl/config/default_site.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
|
||||
<legend><?php echo Text::_('COM_CONFIG_SITE_SETTINGS'); ?></legend>
|
||||
|
||||
<?php foreach ($this->form->getFieldset('site') as $field) : ?>
|
||||
<div class="mb-3">
|
||||
<?php echo $field->label; ?>
|
||||
<?php echo $field->input; ?>
|
||||
<?php if ($field->description) : ?>
|
||||
<div class="form-text hide-aware-inline-help d-none" id="<?php echo $field->id ?>-desc">
|
||||
<?php echo Text::_($field->description) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
|
||||
</fieldset>
|
||||
187
components/com_config/tmpl/modules/default.php
Normal file
187
components/com_config/tmpl/modules/default.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2014 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Multilanguage;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
HTMLHelper::_('behavior.combobox');
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate')
|
||||
->useScript('com_config.modules');
|
||||
|
||||
$editorText = false;
|
||||
$moduleXml = JPATH_SITE . '/modules/' . $this->item['module'] . '/' . $this->item['module'] . '.xml';
|
||||
|
||||
if (is_file($moduleXml)) {
|
||||
$xml = simplexml_load_file($moduleXml);
|
||||
|
||||
if (isset($xml->customContent)) {
|
||||
$editorText = true;
|
||||
}
|
||||
}
|
||||
|
||||
// If multi-language site, make language read-only
|
||||
if (Multilanguage::isEnabled()) {
|
||||
$this->form->setFieldAttribute('language', 'readonly', 'true');
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" method="post" name="adminForm" id="modules-form" class="form-validate">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<legend><?php echo Text::_('COM_CONFIG_MODULES_SETTINGS_TITLE'); ?></legend>
|
||||
|
||||
<div>
|
||||
<?php echo Text::_('COM_CONFIG_MODULES_MODULE_NAME'); ?>
|
||||
<span class="badge bg-secondary"><?php echo $this->item['title']; ?></span>
|
||||
|
||||
<?php echo Text::_('COM_CONFIG_MODULES_MODULE_TYPE'); ?>
|
||||
<span class="badge bg-secondary"><?php echo $this->item['module']; ?></span>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-12">
|
||||
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('title'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('title'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('showtitle'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('showtitle'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('position'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('position'); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<?php if ($this->getCurrentUser()->authorise('core.edit.state', 'com_modules.module.' . $this->item['id'])) : ?>
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('published'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('published'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('publish_up'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('publish_up'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('publish_down'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('publish_down'); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('access'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('access'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('ordering'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('ordering'); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (Multilanguage::isEnabled()) : ?>
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('language'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('language'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('note'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('note'); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div id="options">
|
||||
<?php echo $this->loadTemplate('options'); ?>
|
||||
</div>
|
||||
|
||||
<?php if ($editorText) : ?>
|
||||
<div class="mt-2" id="custom">
|
||||
<?php echo $this->form->getInput('content'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="id" value="<?php echo $this->item['id']; ?>">
|
||||
<input type="hidden" name="return" value="<?php echo Factory::getApplication()->getInput()->get('return', null, 'base64'); ?>">
|
||||
<input type="hidden" name="task" value="">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<button type="button" class="btn btn-primary" data-submit-task="modules.apply">
|
||||
<span class="icon-check" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JAPPLY'); ?>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary" data-submit-task="modules.save">
|
||||
<span class="icon-check" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JSAVE'); ?>
|
||||
</button>
|
||||
<button type="button" class="btn btn-danger" data-submit-task="modules.cancel">
|
||||
<span class="icon-times" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JCANCEL'); ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
48
components/com_config/tmpl/modules/default_options.php
Normal file
48
components/com_config/tmpl/modules/default_options.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2014 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Multilanguage;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$fieldSets = $this->form->getFieldsets('params');
|
||||
|
||||
echo HTMLHelper::_('bootstrap.startAccordion', 'collapseTypes');
|
||||
$i = 0;
|
||||
|
||||
foreach ($fieldSets as $name => $fieldSet) :
|
||||
$label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MODULES_' . strtoupper($name) . '_FIELDSET_LABEL';
|
||||
$class = isset($fieldSet->class) && !empty($fieldSet->class) ? $fieldSet->class : '';
|
||||
|
||||
|
||||
if (isset($fieldSet->description) && trim($fieldSet->description)) :
|
||||
echo '<p class="tip">' . $this->escape(Text::_($fieldSet->description)) . '</p>';
|
||||
endif;
|
||||
?>
|
||||
<?php echo HTMLHelper::_('bootstrap.addSlide', 'collapseTypes', Text::_($label), 'collapse' . ($i++)); ?>
|
||||
|
||||
<ul class="nav flex-column">
|
||||
<?php foreach ($this->form->getFieldset($name) as $field) : ?>
|
||||
<li>
|
||||
<?php // If multi-language site, make menu-type selection read-only ?>
|
||||
<?php if (Multilanguage::isEnabled() && $this->item['module'] === 'mod_menu' && $field->getAttribute('name') === 'menutype') : ?>
|
||||
<?php $field->readonly = true; ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $field->renderField(); ?>
|
||||
</li>
|
||||
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
|
||||
<?php echo HTMLHelper::_('bootstrap.endSlide'); ?>
|
||||
<?php endforeach; ?>
|
||||
<?php echo HTMLHelper::_('bootstrap.endAccordion'); ?>
|
||||
61
components/com_config/tmpl/templates/default.php
Normal file
61
components/com_config/tmpl/templates/default.php
Normal file
@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
$user = $this->getCurrentUser();
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate')
|
||||
->useScript('com_config.templates');
|
||||
|
||||
?>
|
||||
<?php if ($this->params->get('show_page_heading')) : ?>
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
<?php if ($this->escape($this->params->get('page_heading'))) : ?>
|
||||
<?php echo $this->escape($this->params->get('page_heading')); ?>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($this->params->get('page_title')); ?>
|
||||
<?php endif; ?>
|
||||
</h1>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" method="post" name="adminForm" id="templates-form" class="form-validate">
|
||||
|
||||
<div id="page-site" class="tab-pane active">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<?php echo $this->loadTemplate('options'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
|
||||
<div class="mb-2">
|
||||
<button type="button" class="btn btn-primary " data-submit-task="templates.apply">
|
||||
<span class="icon-check text-white" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JSAVE') ?>
|
||||
</button>
|
||||
<button type="button" class="btn btn-danger" data-submit-task="templates.cancel">
|
||||
<span class="icon-times text-white" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JCANCEL') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
20
components/com_config/tmpl/templates/default.xml
Normal file
20
components/com_config/tmpl/templates/default.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_CONFIG_TEMPLATES_VIEW_DEFAULT_TITLE" option="COM_CONFIG_TEMPLATES_VIEW_DEFAULT_OPTION">
|
||||
<help
|
||||
key = "Menu_Item:_Display_Template_Options"
|
||||
/>
|
||||
<message>
|
||||
<![CDATA[COM_CONFIG_TEMPLATES_VIEW_DEFAULT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
<fields name="request">
|
||||
<fieldset name="request" >
|
||||
<field
|
||||
name="controller"
|
||||
type="hidden"
|
||||
default=""
|
||||
/>
|
||||
</fieldset>
|
||||
</fields>
|
||||
</metadata>
|
||||
36
components/com_config/tmpl/templates/default_options.php
Normal file
36
components/com_config/tmpl/templates/default_options.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage com_config
|
||||
*
|
||||
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$fieldSets = $this->form->getFieldsets('params');
|
||||
?>
|
||||
|
||||
<legend><?php echo Text::_('COM_CONFIG_TEMPLATE_SETTINGS'); ?></legend>
|
||||
|
||||
<?php
|
||||
|
||||
// Search for com_config field set
|
||||
if (!empty($fieldSets['com_config'])) {
|
||||
echo $this->form->renderFieldset('com_config');
|
||||
} else {
|
||||
// Fall-back to display all in params
|
||||
foreach ($fieldSets as $name => $fieldSet) {
|
||||
$label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_CONFIG_' . $name . '_FIELDSET_LABEL';
|
||||
|
||||
if (isset($fieldSet->description) && trim($fieldSet->description)) {
|
||||
echo '<p class="tip">' . $this->escape(Text::_($fieldSet->description)) . '</p>';
|
||||
}
|
||||
|
||||
echo $this->form->renderFieldset($name);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user