first commit
This commit is contained in:
214
administrator/components/com_jce/models/config.php
Normal file
214
administrator/components/com_jce/models/config.php
Normal file
@@ -0,0 +1,214 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2009-2022 Ryan Demmer. All rights reserved
|
||||
* @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* JCE is free software. This version may have been modified pursuant
|
||||
* to the GNU General Public License, and as distributed it includes or
|
||||
* is derivative of works licensed under the GNU General Public License or
|
||||
* other free or open source software licenses
|
||||
*/
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
// load base model
|
||||
jimport('joomla.application.component.modelform');
|
||||
|
||||
class JceModelConfig extends JModelForm
|
||||
{
|
||||
/**
|
||||
* Returns a Table object, always creating it.
|
||||
*
|
||||
* @param type $type The table type to instantiate
|
||||
* @param string $prefix A prefix for the table class name. Optional
|
||||
* @param array $config Configuration array for model. Optional
|
||||
*
|
||||
* @return JTable A database object
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
public function getTable($type = 'Extension', $prefix = 'JTable', $config = array())
|
||||
{
|
||||
return JTable::getInstance($type, $prefix, $config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get a form object.
|
||||
*
|
||||
* @param array $data Data for the form
|
||||
* @param bool $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 1.6
|
||||
*/
|
||||
public function getForm($data = array(), $loadData = true)
|
||||
{
|
||||
// Get the form.
|
||||
$form = $this->loadForm('com_jce.config', 'config', array('control' => 'jform', 'load_data' => $loadData));
|
||||
|
||||
if (empty($form)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the data that should be injected in the form.
|
||||
*
|
||||
* @return mixed The data for the form
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
protected function loadFormData()
|
||||
{
|
||||
// Check the session for previously entered form data.
|
||||
$data = JFactory::getApplication()->getUserState('com_jce.config.data', array());
|
||||
|
||||
if (empty($data)) {
|
||||
$data = $this->getData();
|
||||
}
|
||||
|
||||
$this->preprocessData('com_jce.config', $data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/* Override to prevent plugins from processing form data */
|
||||
protected function preprocessData($context, &$data, $group = 'system')
|
||||
{
|
||||
if (!isset($data->params)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$config = $data->params;
|
||||
|
||||
if (is_string($config)) {
|
||||
$config = json_decode($config, true);
|
||||
}
|
||||
|
||||
if (empty($config)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!empty($config['custom_config'])) {
|
||||
// settings syntax, eg: key:value
|
||||
if (is_string($config['custom_config']) && strpos($config['custom_config'], ':') !== false) {
|
||||
|
||||
if (!WFUtility::isJson($config['custom_config'])) {
|
||||
$values = explode(';', $config['custom_config']);
|
||||
|
||||
// reset as array
|
||||
$config['custom_config'] = array();
|
||||
|
||||
foreach ($values as $value) {
|
||||
list($key, $val) = explode(':', $value);
|
||||
|
||||
$config['custom_config'][] = array(
|
||||
'name' => $key,
|
||||
'value' => trim($val, " \t\n\r\0\x0B'\""),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$data->params = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the configuration data.
|
||||
*
|
||||
* This method will load the global configuration data straight from
|
||||
* JConfig. If configuration data has been saved in the session, that
|
||||
* data will be merged into the original data, overwriting it.
|
||||
*
|
||||
* @return array An array containg all global config data
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
public function getData()
|
||||
{
|
||||
$table = $this->getTable();
|
||||
|
||||
$id = $table->find(array(
|
||||
'type' => 'plugin',
|
||||
'element' => 'jce',
|
||||
'folder' => 'editors',
|
||||
));
|
||||
|
||||
if (!$table->load($id)) {
|
||||
$this->setError($table->getError());
|
||||
return false;
|
||||
}
|
||||
|
||||
// json_decode
|
||||
$json = json_decode($table->params, true);
|
||||
|
||||
if (empty($json)) {
|
||||
$json = array();
|
||||
}
|
||||
|
||||
array_walk($json, function (&$value, $key) {
|
||||
if (is_numeric($value)) {
|
||||
$value = $value + 0;
|
||||
}
|
||||
});
|
||||
|
||||
$data = new StdClass;
|
||||
$data->params = $json;
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to save the form data.
|
||||
*
|
||||
* @param array The form data
|
||||
*
|
||||
* @return bool True on success
|
||||
*
|
||||
* @since 2.7
|
||||
*/
|
||||
public function save($data)
|
||||
{
|
||||
$table = $this->getTable();
|
||||
|
||||
$id = $table->find(array(
|
||||
'type' => 'plugin',
|
||||
'element' => 'jce',
|
||||
'folder' => 'editors',
|
||||
));
|
||||
|
||||
if (!$id) {
|
||||
$this->setError('Invalid plugin');
|
||||
return false;
|
||||
}
|
||||
|
||||
// Load the previous Data
|
||||
if (!$table->load($id)) {
|
||||
$this->setError($table->getError());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Bind the data.
|
||||
if (!$table->bind($data)) {
|
||||
$this->setError($table->getError());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check the data.
|
||||
if (!$table->check()) {
|
||||
$this->setError($table->getError());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Store the data.
|
||||
if (!$table->store()) {
|
||||
$this->setError($table->getError());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user