Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
PKTu�[�6�
index.htmlnu�[���<!DOCTYPE
html><title></title>PKTu�[b3�VVY9ca401dc5c83ea71321893da14a56979-cache-com_templates-684a70c70c7a434505a173a5221dea02.phpnu�[���<?php
die("Access Denied");
?>#x#a:10:{i:4;O:8:"stdClass":4:{s:2:"id";s:1:"4";s:4:"home";s:1:"0";s:8:"template";s:5:"beez3";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":8:{s:12:"wrapperSmall";s:2:"53";s:12:"wrapperLarge";s:2:"72";s:4:"logo";s:23:"images/joomla_black.png";s:9:"sitetitle";s:7:"Joomla!";s:15:"sitedescription";s:30:"Open
Source Content
Management";s:11:"navposition";s:4:"left";s:13:"templatecolor";s:8:"personal";s:5:"html5";s:1:"0";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:7;O:8:"stdClass":4:{s:2:"id";s:1:"7";s:4:"home";s:1:"0";s:8:"template";s:9:"protostar";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":5:{s:13:"templateColor";s:0:"";s:8:"logoFile";s:0:"";s:10:"googleFont";s:1:"1";s:14:"googleFontName";s:9:"Open+Sans";s:14:"fluidContainer";s:1:"0";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:9;O:8:"stdClass":4:{s:2:"id";s:1:"9";s:4:"home";s:1:"0";s:8:"template";s:6:"mytemp";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":0:{}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:10;O:8:"stdClass":4:{s:2:"id";s:2:"10";s:4:"home";s:1:"1";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"10";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:11;O:8:"stdClass":4:{s:2:"id";s:2:"11";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"11";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:12;O:8:"stdClass":4:{s:2:"id";s:2:"12";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"12";s:6:"preset";s:16:"lmsyaran-default";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:13;O:8:"stdClass":4:{s:2:"id";s:2:"13";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"13";s:6:"preset";s:19:"lmsyaran-consulting";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:15;O:8:"stdClass":4:{s:2:"id";s:2:"15";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"15";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:16;O:8:"stdClass":4:{s:2:"id";s:2:"16";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"16";s:6:"preset";s:7:"default";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:0;O:8:"stdClass":4:{s:2:"id";s:2:"10";s:4:"home";s:1:"1";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"10";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}}PKTu�[b3�VVY9ca401dc5c83ea71321893da14a56979-cache-com_templates-093607fbfc00be0cbfe5d9593ee81ea1.phpnu�[���<?php
die("Access Denied");
?>#x#a:10:{i:4;O:8:"stdClass":4:{s:2:"id";s:1:"4";s:4:"home";s:1:"0";s:8:"template";s:5:"beez3";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":8:{s:12:"wrapperSmall";s:2:"53";s:12:"wrapperLarge";s:2:"72";s:4:"logo";s:23:"images/joomla_black.png";s:9:"sitetitle";s:7:"Joomla!";s:15:"sitedescription";s:30:"Open
Source Content
Management";s:11:"navposition";s:4:"left";s:13:"templatecolor";s:8:"personal";s:5:"html5";s:1:"0";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:7;O:8:"stdClass":4:{s:2:"id";s:1:"7";s:4:"home";s:1:"0";s:8:"template";s:9:"protostar";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":5:{s:13:"templateColor";s:0:"";s:8:"logoFile";s:0:"";s:10:"googleFont";s:1:"1";s:14:"googleFontName";s:9:"Open+Sans";s:14:"fluidContainer";s:1:"0";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:9;O:8:"stdClass":4:{s:2:"id";s:1:"9";s:4:"home";s:1:"0";s:8:"template";s:6:"mytemp";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":0:{}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:10;O:8:"stdClass":4:{s:2:"id";s:2:"10";s:4:"home";s:1:"1";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"10";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:11;O:8:"stdClass":4:{s:2:"id";s:2:"11";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"11";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:12;O:8:"stdClass":4:{s:2:"id";s:2:"12";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"12";s:6:"preset";s:16:"lmsyaran-default";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:13;O:8:"stdClass":4:{s:2:"id";s:2:"13";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"13";s:6:"preset";s:19:"lmsyaran-consulting";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:15;O:8:"stdClass":4:{s:2:"id";s:2:"15";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"15";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:16;O:8:"stdClass":4:{s:2:"id";s:2:"16";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"16";s:6:"preset";s:7:"default";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:0;O:8:"stdClass":4:{s:2:"id";s:2:"10";s:4:"home";s:1:"1";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"10";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}}PKTu�[b3�VVY9ca401dc5c83ea71321893da14a56979-cache-com_templates-8e04e0707ff0b8210965c751d477f8ff.phpnu�[���<?php
die("Access Denied");
?>#x#a:10:{i:4;O:8:"stdClass":4:{s:2:"id";s:1:"4";s:4:"home";s:1:"0";s:8:"template";s:5:"beez3";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":8:{s:12:"wrapperSmall";s:2:"53";s:12:"wrapperLarge";s:2:"72";s:4:"logo";s:23:"images/joomla_black.png";s:9:"sitetitle";s:7:"Joomla!";s:15:"sitedescription";s:30:"Open
Source Content
Management";s:11:"navposition";s:4:"left";s:13:"templatecolor";s:8:"personal";s:5:"html5";s:1:"0";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:7;O:8:"stdClass":4:{s:2:"id";s:1:"7";s:4:"home";s:1:"0";s:8:"template";s:9:"protostar";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":5:{s:13:"templateColor";s:0:"";s:8:"logoFile";s:0:"";s:10:"googleFont";s:1:"1";s:14:"googleFontName";s:9:"Open+Sans";s:14:"fluidContainer";s:1:"0";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:9;O:8:"stdClass":4:{s:2:"id";s:1:"9";s:4:"home";s:1:"0";s:8:"template";s:6:"mytemp";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":0:{}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:10;O:8:"stdClass":4:{s:2:"id";s:2:"10";s:4:"home";s:1:"1";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"10";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:11;O:8:"stdClass":4:{s:2:"id";s:2:"11";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"11";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:12;O:8:"stdClass":4:{s:2:"id";s:2:"12";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"12";s:6:"preset";s:16:"lmsyaran-default";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:13;O:8:"stdClass":4:{s:2:"id";s:2:"13";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"13";s:6:"preset";s:19:"lmsyaran-consulting";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:15;O:8:"stdClass":4:{s:2:"id";s:2:"15";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"15";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:16;O:8:"stdClass":4:{s:2:"id";s:2:"16";s:4:"home";s:1:"0";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"16";s:6:"preset";s:7:"default";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}i:0;O:8:"stdClass":4:{s:2:"id";s:2:"10";s:4:"home";s:1:"1";s:8:"template";s:11:"g5_hydrogen";s:6:"params";O:24:"Joomla\Registry\Registry":3:{s:7:"*data";O:8:"stdClass":2:{s:13:"configuration";s:2:"10";s:6:"preset";s:13:"lmsyaran-home";}s:14:"*initialized";b:1;s:9:"separator";s:1:".";}}}PK��[>�jc66
access.xmlnu�[���<?xml version="1.0"
encoding="utf-8" ?>
<access component="com_templates">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN"
description="JACTION_ADMIN_COMPONENT_DESC" />
<action name="core.options"
title="JACTION_OPTIONS"
description="JACTION_OPTIONS_COMPONENT_DESC" />
<action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" />
<action name="core.create" title="JACTION_CREATE"
description="JACTION_CREATE_COMPONENT_DESC" />
<action name="core.delete" title="JACTION_DELETE"
description="JACTION_DELETE_COMPONENT_DESC" />
<action name="core.edit" title="JACTION_EDIT"
description="JACTION_EDIT_COMPONENT_DESC" />
<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="JACTION_EDITSTATE_COMPONENT_DESC" />
</section>
</access>
PK��[�G�[jj
config.xmlnu�[���<?xml version="1.0"
encoding="utf-8"?>
<config>
<fieldset
name="templates"
label="COM_TEMPLATES_SUBMENU_TEMPLATES"
description="COM_TEMPLATES_CONFIG_FIELDSET_DESC">
<field
name="template_positions_display"
type="radio"
label="COM_TEMPLATES_CONFIG_POSITIONS_LABEL"
description="COM_TEMPLATES_CONFIG_POSITIONS_DESC"
class="btn-group btn-group-yesno"
default="0"
>
<option value="1">JENABLED</option>
<option value="0">JDISABLED</option>
</field>
<field
name="upload_limit"
type="number"
label="COM_TEMPLATES_CONFIG_UPLOAD_LABEL"
description="COM_TEMPLATES_CONFIG_UPLOAD_DESC"
default="10"
extension="com_templates"
/>
<field
name="warning"
type="note"
label="COM_TEMPLATES_CONFIG_SUPPORTED_LABEL"
description="COM_TEMPLATES_CONFIG_SUPPORTED_DESC"
/>
<field
name="image_formats"
type="text"
label="COM_TEMPLATES_CONFIG_IMAGE_LABEL"
description="COM_TEMPLATES_CONFIG_IMAGE_DESC"
default="gif,bmp,jpg,jpeg"
extension="com_templates"
/>
<field
name="source_formats"
type="text"
label="COM_TEMPLATES_CONFIG_SOURCE_LABEL"
description="COM_TEMPLATES_CONFIG_SOURCE_DESC"
default="txt,less,ini,xml,js,php,css,sass,scss"
extension="com_templates"
/>
<field
name="font_formats"
type="text"
label="COM_TEMPLATES_CONFIG_FONT_LABEL"
description="COM_TEMPLATES_CONFIG_FONT_DESC"
default="woff,ttf,otf"
extension="com_templates"
/>
<field
name="compressed_formats"
type="hidden"
default="zip"
extension="com_templates"
/>
</fieldset>
<fieldset
name="permissions"
label="JCONFIG_PERMISSIONS_LABEL"
description="JCONFIG_PERMISSIONS_DESC"
>
<field
name="rules"
type="rules"
label="JCONFIG_PERMISSIONS_LABEL"
filter="rules"
validate="rules"
component="com_templates"
section="component"
/>
</fieldset>
</config>
PK��[��)���controller.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Templates manager master display controller.
*
* @since 1.6
*/
class TemplatesController extends JControllerLegacy
{
/**
* @var string The default view.
* @since 1.6
*/
protected $default_view = 'styles';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param boolean $urlparams An array of safe URL parameters and their
variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return TemplatesController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
$view = $this->input->get('view', 'styles');
$layout = $this->input->get('layout',
'default');
$id = $this->input->getInt('id');
$document = JFactory::getDocument();
// For JSON requests
if ($document->getType() == 'json')
{
$view = new TemplatesViewStyle;
// Get/Create the model
if ($model = new TemplatesModelStyle)
{
$model->addTablePath(JPATH_ADMINISTRATOR .
'/components/com_templates/tables');
// Push the model into the view (as default)
$view->setModel($model, true);
}
$view->document = $document;
return $view->display();
}
// Check for edit form.
if ($view == 'style' && $layout == 'edit'
&& !$this->checkEditId('com_templates.edit.style',
$id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID',
$id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_templates&view=styles',
false));
return false;
}
return parent::display();
}
}
PK��[͖����controllers/style.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Template style controller class.
*
* @since 1.6
*/
class TemplatesControllerStyle extends JControllerForm
{
/**
* The prefix to use with controller messages.
*
* @var string
* @since 1.6
*/
protected $text_prefix = 'COM_TEMPLATES_STYLE';
/**
* Method to save a template style.
*
* @param string $key The name of the primary key of the URL
variable.
* @param string $urlVar The name of the URL variable if different
from the primary key (sometimes required to avoid router collisions).
*
* @return boolean True if successful, false otherwise.
*
* @since 1.6
*/
public function save($key = null, $urlVar = null)
{
$this->checkToken();
$document = JFactory::getDocument();
if ($document->getType() === 'json')
{
$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$model = $this->getModel();
$table = $model->getTable();
$data = $this->input->post->get('params', array(),
'array');
$checkin = property_exists($table, 'checked_out');
$context = $this->option . '.edit.' . $this->context;
$task = $this->getTask();
$item = $model->getItem($app->getTemplate(true)->id);
// Setting received params
$item->set('params', $data);
$data = $item->getProperties();
unset($data['xml']);
$key = $table->getKeyName();
// Access check.
if (!$this->allowSave($data, $key))
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
JForm::addFormPath(JPATH_ADMINISTRATOR .
'/components/com_templates/models/forms');
// Validate the posted data.
// Sometimes the form needs some posted data, such as for plugins and
modules.
$form = $model->getForm($data, false);
if (!$form)
{
$app->enqueueMessage($model->getError(), 'error');
return false;
}
// Test whether the data is valid.
$validData = $model->validate($form, $data);
if ($validData === false)
{
// Get the validation messages.
$errors = $model->getErrors();
// Push up to three validation messages out to the user.
for ($i = 0, $n = count($errors); $i < $n && $i < 3;
$i++)
{
if ($errors[$i] instanceof Exception)
{
$app->enqueueMessage($errors[$i]->getMessage(),
'warning');
}
else
{
$app->enqueueMessage($errors[$i], 'warning');
}
}
// Save the data in the session.
$app->setUserState($context . '.data', $data);
return false;
}
if (!isset($validData['tags']))
{
$validData['tags'] = null;
}
// Attempt to save the data.
if (!$model->save($validData))
{
// Save the data in the session.
$app->setUserState($context . '.data', $validData);
$app->enqueueMessage(JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED',
$model->getError()), 'error');
return false;
}
// Save succeeded, so check-in the record.
if ($checkin && $model->checkin($validData[$key]) === false)
{
// Save the data in the session.
$app->setUserState($context . '.data', $validData);
// Check-in failed, so go back to the record and display a notice.
$app->enqueueMessage(JText::sprintf('JLIB_APPLICATION_ERROR_CHECKIN_FAILED',
$model->getError()), 'error');
return false;
}
// Redirect the user and adjust session state
// Set the record data in the session.
$recordId = $model->getState($this->context . '.id');
$this->holdEditId($context, $recordId);
$app->setUserState($context . '.data', null);
$model->checkout($recordId);
// Invoke the postSave method to allow for the child class to access the
model.
$this->postSaveHook($model, $validData);
return true;
}
else
{
parent::save($key, $urlVar);
}
}
}
PK��[Z�R�controllers/styles.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\Utilities\ArrayHelper;
/**
* Template styles list controller class.
*
* @since 1.6
*/
class TemplatesControllerStyles extends JControllerAdmin
{
/**
* Method to clone and existing template style.
*
* @return void
*/
public function duplicate()
{
// Check for request forgeries
$this->checkToken();
$pks = $this->input->post->get('cid', array(),
'array');
try
{
if (empty($pks))
{
throw new
Exception(JText::_('COM_TEMPLATES_NO_TEMPLATE_SELECTED'));
}
$pks = ArrayHelper::toInteger($pks);
$model = $this->getModel();
$model->duplicate($pks);
$this->setMessage(JText::_('COM_TEMPLATES_SUCCESS_DUPLICATED'));
}
catch (Exception $e)
{
JError::raiseWarning(500, $e->getMessage());
}
$this->setRedirect('index.php?option=com_templates&view=styles');
}
/**
* Proxy for getModel.
*
* @param string $name The model name. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config Configuration array for model. Optional.
*
* @return JModelLegacy
*
* @since 1.6
*/
public function getModel($name = 'Style', $prefix =
'TemplatesModel', $config = array())
{
return parent::getModel($name, $prefix, array('ignore_request'
=> true));
}
/**
* Method to set the home template for a client.
*
* @return void
*
* @since 1.6
*/
public function setDefault()
{
// Check for request forgeries
$this->checkToken();
$pks = $this->input->post->get('cid', array(),
'array');
try
{
if (empty($pks))
{
throw new
Exception(JText::_('COM_TEMPLATES_NO_TEMPLATE_SELECTED'));
}
$pks = ArrayHelper::toInteger($pks);
// Pop off the first element.
$id = array_shift($pks);
$model = $this->getModel();
$model->setHome($id);
$this->setMessage(JText::_('COM_TEMPLATES_SUCCESS_HOME_SET'));
}
catch (Exception $e)
{
JError::raiseWarning(500, $e->getMessage());
}
$this->setRedirect('index.php?option=com_templates&view=styles');
}
/**
* Method to unset the default template for a client and for a language
*
* @return void
*
* @since 1.6
*/
public function unsetDefault()
{
// Check for request forgeries
$this->checkToken('request');
$pks = $this->input->get->get('cid', array(),
'array');
$pks = ArrayHelper::toInteger($pks);
try
{
if (empty($pks))
{
throw new
Exception(JText::_('COM_TEMPLATES_NO_TEMPLATE_SELECTED'));
}
// Pop off the first element.
$id = array_shift($pks);
$model = $this->getModel();
$model->unsetHome($id);
$this->setMessage(JText::_('COM_TEMPLATES_SUCCESS_HOME_UNSET'));
}
catch (Exception $e)
{
JError::raiseWarning(500, $e->getMessage());
}
$this->setRedirect('index.php?option=com_templates&view=styles');
}
}
PK��[~ ?�Y�Ycontrollers/template.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
JLoader::register('InstallerModelInstall', JPATH_ADMINISTRATOR .
'/components/com_installer/models/install.php');
/**
* Template style controller class.
*
* @since 1.6
*/
class TemplatesControllerTemplate extends JControllerLegacy
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JControllerLegacy
* @since 3.2
*/
public function __construct($config = array())
{
parent::__construct($config);
// Apply, Save & New, and Save As copy should be standard on forms.
$this->registerTask('apply', 'save');
}
/**
* Method for closing the template.
*
* @return void
*
* @since 3.2
*/
public function cancel()
{
$this->setRedirect(JRoute::_('index.php?option=com_templates&view=templates',
false));
}
/**
* Method for closing a file.
*
* @return void
*
* @since 3.2
*/
public function close()
{
$app = JFactory::getApplication();
$file = base64_encode('home');
$id = $app->input->get('id');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
/**
* Method for copying the template.
*
* @return boolean true on success, false otherwise
*
* @since 3.2
*/
public function copy()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$this->input->set('installtype', 'folder');
$newName = $this->input->get('new_name');
$newNameRaw = $this->input->get('new_name', null,
'string');
$templateID = $this->input->getInt('id', 0);
$file = $this->input->get('file');
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
$this->setRedirect('index.php?option=com_templates&view=template&id='
. $templateID . '&file=' . $file);
$model = $this->getModel('Template',
'TemplatesModel');
$model->setState('new_name', $newName);
$model->setState('tmp_prefix',
uniqid('template_copy_'));
$model->setState('to_path',
JFactory::getConfig()->get('tmp_path') . '/' .
$model->getState('tmp_prefix'));
// Process only if we have a new name entered
if (strlen($newName) > 0)
{
if (!JFactory::getUser()->authorise('core.create',
'com_templates'))
{
// User is not authorised to delete
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_CREATE_NOT_PERMITTED'),
'error');
return false;
}
// Set FTP credentials, if given
JClientHelper::setCredentialsFromRequest('ftp');
// Check that new name is valid
if (($newNameRaw !== null) && ($newName !== $newNameRaw))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INVALID_TEMPLATE_NAME'),
'error');
return false;
}
// Check that new name doesn't already exist
if (!$model->checkNewName())
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_DUPLICATE_TEMPLATE_NAME'),
'error');
return false;
}
// Check that from name does exist and get the folder name
$fromName = $model->getFromName();
if (!$fromName)
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INVALID_FROM_NAME'),
'error');
return false;
}
// Call model's copy method
if (!$model->copy())
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_COULD_NOT_COPY'),
'error');
return false;
}
// Call installation model
$this->input->set('install_directory',
JFactory::getConfig()->get('tmp_path') . '/' .
$model->getState('tmp_prefix'));
$installModel = $this->getModel('Install',
'InstallerModel');
JFactory::getLanguage()->load('com_installer');
if (!$installModel->install())
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_COULD_NOT_INSTALL'),
'error');
return false;
}
$this->setMessage(JText::sprintf('COM_TEMPLATES_COPY_SUCCESS',
$newName));
$model->cleanup();
return true;
}
}
/**
* Method to get a model object, loading it if required.
*
* @param string $name The model name. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config Configuration array for model. Optional
(note, the empty array is atypical compared to other models).
*
* @return JModelLegacy The model.
*
* @since 3.2
*/
public function getModel($name = 'Template', $prefix =
'TemplatesModel', $config = array())
{
return parent::getModel($name, $prefix, $config);
}
/**
* Method to check if the user can modify template files
*
* @return boolean
*
* @since 3.2
*/
protected function allowEdit()
{
return JFactory::getUser()->authorise('core.admin');
}
/**
* Saves a template source file.
*
* @return void
*
* @since 3.2
*/
public function save()
{
// Check for request forgeries.
$this->checkToken();
$app = JFactory::getApplication();
$data = $this->input->post->get('jform',
array(), 'array');
$task = $this->getTask();
$model = $this->getModel();
$fileName = $app->input->get('file');
$explodeArray = explode(':', base64_decode($fileName));
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
// Match the stored id's with the submitted.
if (empty($data['extension_id']) ||
empty($data['filename']))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_ID_FILENAME_MISMATCH'),
'error');
return false;
}
elseif ($data['extension_id'] !=
$model->getState('extension.id'))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_ID_FILENAME_MISMATCH'),
'error');
return false;
}
elseif ($data['filename'] != end($explodeArray))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_ID_FILENAME_MISMATCH'),
'error');
return false;
}
// Validate the posted data.
$form = $model->getForm();
if (!$form)
{
$app->enqueueMessage($model->getError(), 'error');
return false;
}
$data = $model->validate($form, $data);
// Check for validation errors.
if ($data === false)
{
// Get the validation messages.
$errors = $model->getErrors();
// Push up to three validation messages out to the user.
for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++)
{
if ($errors[$i] instanceof Exception)
{
$app->enqueueMessage($errors[$i]->getMessage(),
'warning');
}
else
{
$app->enqueueMessage($errors[$i], 'warning');
}
}
// Redirect back to the edit screen.
$url =
'index.php?option=com_templates&view=template&id=' .
$model->getState('extension.id') . '&file=' .
$fileName;
$this->setRedirect(JRoute::_($url, false));
return false;
}
// Attempt to save the data.
if (!$model->save($data))
{
// Redirect back to the edit screen.
$this->setMessage(JText::sprintf('JERROR_SAVE_FAILED',
$model->getError()), 'warning');
$url =
'index.php?option=com_templates&view=template&id=' .
$model->getState('extension.id') . '&file=' .
$fileName;
$this->setRedirect(JRoute::_($url, false));
return false;
}
$this->setMessage(JText::_('COM_TEMPLATES_FILE_SAVE_SUCCESS'));
// Redirect the user based on the chosen task.
switch ($task)
{
case 'apply':
// Redirect back to the edit screen.
$url =
'index.php?option=com_templates&view=template&id=' .
$model->getState('extension.id') . '&file=' .
$fileName;
$this->setRedirect(JRoute::_($url, false));
break;
default:
// Redirect to the list screen.
$file = base64_encode('home');
$id = $app->input->get('id');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
break;
}
}
/**
* Method for creating override.
*
* @return void
*
* @since 3.2
*/
public function overrides()
{
// Check for request forgeries.
$this->checkToken('get');
$app = JFactory::getApplication();
$model = $this->getModel();
$file = $app->input->get('file');
$override = base64_decode($app->input->get('folder'));
$id = $app->input->get('id');
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if ($model->createOverride($override))
{
$this->setMessage(JText::_('COM_TEMPLATES_OVERRIDE_SUCCESS'));
}
// Redirect back to the edit screen.
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
/**
* Method for compiling LESS.
*
* @return void
*
* @since 3.2
*/
public function less()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel();
$id = $app->input->get('id');
$file = $app->input->get('file');
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if ($model->compileLess($file))
{
$this->setMessage(JText::_('COM_TEMPLATES_COMPILE_SUCCESS'));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_COMPILE_ERROR'),
'error');
}
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
/**
* Method for deleting a file.
*
* @return void
*
* @since 3.2
*/
public function delete()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel();
$id = $app->input->get('id');
$file = $app->input->get('file');
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if (base64_decode(urldecode($file)) == '/index.php')
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INDEX_DELETE'),
'warning');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif ($model->deleteFile($file))
{
$this->setMessage(JText::_('COM_TEMPLATES_FILE_DELETE_SUCCESS'));
$file = base64_encode('home');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_DELETE'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for creating a new file.
*
* @return void
*
* @since 3.2
*/
public function createFile()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel();
$id = $app->input->get('id');
$file = $app->input->get('file');
$name = $app->input->get('name');
$location = base64_decode($app->input->get('address'));
$type = $app->input->get('type');
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if ($type == 'null')
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_TYPE'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif (!preg_match('/^[a-zA-Z0-9-_]+$/', $name))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_NAME'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif ($model->createFile($name, $type, $location))
{
$this->setMessage(JText::_('COM_TEMPLATES_FILE_CREATE_SUCCESS'));
$file = urlencode(base64_encode($location . '/' . $name .
'.' . $type));
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_CREATE'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for uploading a file.
*
* @return void
*
* @since 3.2
*/
public function uploadFile()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel();
$id = $app->input->get('id');
$file = $app->input->get('file');
$upload = $app->input->files->get('files');
$location = base64_decode($app->input->get('address'));
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if ($return = $model->uploadFile($upload, $location))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_UPLOAD_SUCCESS')
. $upload['name']);
$redirect = base64_encode($return);
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $redirect;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_UPLOAD'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for creating a new folder.
*
* @return void
*
* @since 3.2
*/
public function createFolder()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel();
$id = $app->input->get('id');
$file = $app->input->get('file');
$name = $app->input->get('name');
$location = base64_decode($app->input->get('address'));
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if (!preg_match('/^[a-zA-Z0-9-_.]+$/', $name))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FOLDER_NAME'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif ($model->createFolder($name, $location))
{
$this->setMessage(JText::_('COM_TEMPLATES_FOLDER_CREATE_SUCCESS'));
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FOLDER_CREATE'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for deleting a folder.
*
* @return void
*
* @since 3.2
*/
public function deleteFolder()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel();
$id = $app->input->get('id');
$file = $app->input->get('file');
$location = base64_decode($app->input->get('address'));
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if (empty($location))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_ROOT_DELETE'),
'warning');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif ($model->deleteFolder($location))
{
$this->setMessage(JText::_('COM_TEMPLATES_FOLDER_DELETE_SUCCESS'));
if (stristr(base64_decode($file), $location) != false)
{
$file = base64_encode('home');
}
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_DELETE_ERROR'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for renaming a file.
*
* @return void
*
* @since 3.2
*/
public function renameFile()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel();
$id = $app->input->get('id');
$file = $app->input->get('file');
$newName = $app->input->get('new_name');
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if (base64_decode(urldecode($file)) == '/index.php')
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_RENAME_INDEX'),
'warning');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif (!preg_match('/^[a-zA-Z0-9-_]+$/', $newName))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_NAME'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif ($rename = $model->renameFile($file, $newName))
{
$this->setMessage(JText::_('COM_TEMPLATES_FILE_RENAME_SUCCESS'));
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $rename;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FILE_RENAME'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for cropping an image.
*
* @return void
*
* @since 3.2
*/
public function cropImage()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$id = $app->input->get('id');
$file = $app->input->get('file');
$x = $app->input->get('x');
$y = $app->input->get('y');
$w = $app->input->get('w');
$h = $app->input->get('h');
$model = $this->getModel();
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if (empty($w) && empty($h) && empty($x) &&
empty($y))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_CROP_AREA_ERROR'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif ($model->cropImage($file, $w, $h, $x, $y))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_CROP_SUCCESS'));
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_CROP_ERROR'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for resizing an image.
*
* @return void
*
* @since 3.2
*/
public function resizeImage()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$id = $app->input->get('id');
$file = $app->input->get('file');
$width = $app->input->get('width');
$height = $app->input->get('height');
$model = $this->getModel();
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if ($model->resizeImage($file, $width, $height))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_RESIZE_SUCCESS'));
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_RESIZE_ERROR'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for copying a file.
*
* @return void
*
* @since 3.2
*/
public function copyFile()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$id = $app->input->get('id');
$file = $app->input->get('file');
$newName = $app->input->get('new_name');
$location = base64_decode($app->input->get('address'));
$model = $this->getModel();
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if (!preg_match('/^[a-zA-Z0-9-_]+$/', $newName))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_INVALID_FILE_NAME'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
elseif ($model->copyFile($newName, $location, $file))
{
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_COPY_FAIL'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
/**
* Method for extracting an archive file.
*
* @return void
*
* @since 3.2
*/
public function extractArchive()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$id = $app->input->get('id');
$file = $app->input->get('file');
$model = $this->getModel();
// Access check.
if (!$this->allowEdit())
{
$app->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_SAVE_NOT_PERMITTED'),
'error');
return false;
}
if ($model->extractArchive($file))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_EXTRACT_SUCCESS'));
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_EXTRACT_FAIL'),
'error');
$url =
'index.php?option=com_templates&view=template&id=' . $id
. '&file=' . $file;
$this->setRedirect(JRoute::_($url, false));
}
}
}
PK��[�5]J�
�
helpers/html/templates.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* JHtml helper class.
*
* @since 1.6
*/
class JHtmlTemplates
{
/**
* Display the thumb for the template.
*
* @param string $template The name of the template.
* @param integer $clientId The application client ID the template
applies to
*
* @return string The html string
*
* @since 1.6
*/
public static function thumb($template, $clientId = 0)
{
$client = JApplicationHelper::getClientInfo($clientId);
$basePath = $client->path . '/templates/' . $template;
$thumb = $basePath . '/template_thumbnail.png';
$preview = $basePath . '/template_preview.png';
$html = '';
if (file_exists($thumb))
{
JHtml::_('bootstrap.tooltip');
$clientPath = ($clientId == 0) ? '' :
'administrator/';
$thumb = $clientPath . 'templates/' . $template .
'/template_thumbnail.png';
$html = JHtml::_('image', $thumb,
JText::_('COM_TEMPLATES_PREVIEW'));
if (file_exists($preview))
{
$html = '<button type="button"
data-target="#' . $template . '-Modal"
class="thumbnail pull-left hasTooltip"
data-toggle="modal"'
. ' title="' . JHtml::_('tooltipText',
'COM_TEMPLATES_CLICK_TO_ENLARGE') . '">' .
$html . '</button>';
}
}
return $html;
}
/**
* Renders the html for the modal linked to thumb.
*
* @param string $template The name of the template.
* @param integer $clientId The application client ID the template
applies to
*
* @return string The html string
*
* @since 3.4
*/
public static function thumbModal($template, $clientId = 0)
{
$client = JApplicationHelper::getClientInfo($clientId);
$basePath = $client->path . '/templates/' . $template;
$baseUrl = ($clientId == 0) ? JUri::root(true) : JUri::root(true) .
'/administrator';
$thumb = $basePath . '/template_thumbnail.png';
$preview = $basePath . '/template_preview.png';
$html = '';
if (file_exists($thumb))
{
if (file_exists($preview))
{
$preview = $baseUrl . '/templates/' . $template .
'/template_preview.png';
$footer = '<button type="button"
class="btn" data-dismiss="modal">'
. JText::_('JTOOLBAR_CLOSE') . '</button>';
$html .= JHtml::_(
'bootstrap.renderModal',
$template . '-Modal',
array(
'title' =>
JText::_('COM_TEMPLATES_BUTTON_PREVIEW'),
'height' => '500px',
'width' => '800px',
'footer' => $footer,
),
$body = '<div><img src="' . $preview .
'" style="max-width:100%" alt="' . $template
. '"></div>'
);
}
}
return $html;
}
}
PK��[*� 0helpers/template.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Template Helper class.
*
* @since 3.2
*/
abstract class TemplateHelper
{
/**
* Checks if the file is an image
*
* @param string $fileName The filename
*
* @return boolean
*
* @since 3.2
*/
public static function getTypeIcon($fileName)
{
// Get file extension
return strtolower(substr($fileName, strrpos($fileName, '.') +
1));
}
/**
* Checks if the file can be uploaded
*
* @param array $file File information
* @param string $err An error message to be returned
*
* @return boolean
*
* @since 3.2
*/
public static function canUpload($file, $err = '')
{
$params = JComponentHelper::getParams('com_templates');
if (empty($file['name']))
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_UPLOAD_INPUT'),
'error');
return false;
}
// Media file names should never have executable extensions buried in
them.
$executable = array(
'exe', 'phtml','java', 'perl',
'py', 'asp','dll', 'go',
'jar',
'ade', 'adp', 'bat', 'chm',
'cmd', 'com', 'cpl', 'hta',
'ins', 'isp',
'jse', 'lib', 'mde', 'msc',
'msp', 'mst', 'pif', 'scr',
'sct', 'shb',
'sys', 'vb', 'vbe', 'vbs',
'vxd', 'wsc', 'wsf', 'wsh'
);
$explodedFileName = explode('.', $file['name']);
if (count($explodedFileName) > 2)
{
foreach ($executable as $extensionName)
{
if (in_array($extensionName, $explodedFileName))
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EXECUTABLE'),
'error');
return false;
}
}
}
jimport('joomla.filesystem.file');
if ($file['name'] !== JFile::makeSafe($file['name'])
|| preg_match('/\s/', JFile::makeSafe($file['name'])))
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNFILENAME'),
'error');
return false;
}
$format = strtolower(JFile::getExt($file['name']));
$imageTypes = explode(',',
$params->get('image_formats'));
$sourceTypes = explode(',',
$params->get('source_formats'));
$fontTypes = explode(',',
$params->get('font_formats'));
$archiveTypes = explode(',',
$params->get('compressed_formats'));
$allowable = array_merge($imageTypes, $sourceTypes, $fontTypes,
$archiveTypes);
if ($format == '' || $format == false || (!in_array($format,
$allowable)))
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNFILETYPE'),
'error');
return false;
}
if (in_array($format, $archiveTypes))
{
$zip = new ZipArchive;
if ($zip->open($file['tmp_name']) === true)
{
for ($i = 0; $i < $zip->numFiles; $i++)
{
$entry = $zip->getNameIndex($i);
$endString = substr($entry, -1);
if ($endString != DIRECTORY_SEPARATOR)
{
$explodeArray = explode('.', $entry);
$ext = end($explodeArray);
if (!in_array($ext, $allowable))
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_UNSUPPORTED_ARCHIVE'),
'error');
return false;
}
}
}
}
else
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_OPEN_FAIL'),
'error');
return false;
}
}
// Max upload size set to 2 MB for Template Manager
$maxSize = (int) ($params->get('upload_limit') * 1024 *
1024);
if ($maxSize > 0 && (int) $file['size'] >
$maxSize)
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNFILETOOLARGE'),
'error');
return false;
}
$xss_check = file_get_contents($file['tmp_name'], false, null,
-1, 256);
$html_tags = array(
'abbr', 'acronym', 'address',
'applet', 'area', 'audioscope',
'base', 'basefont', 'bdo',
'bgsound', 'big', 'blackface',
'blink', 'blockquote',
'body', 'bq', 'br', 'button',
'caption', 'center', 'cite',
'code', 'col', 'colgroup',
'comment', 'custom', 'dd', 'del',
'dfn', 'dir', 'div',
'dl', 'dt', 'em', 'embed',
'fieldset', 'fn', 'font', 'form',
'frame', 'frameset', 'h1', 'h2',
'h3', 'h4', 'h5', 'h6',
'head', 'hr', 'html',
'iframe', 'ilayer', 'img',
'input', 'ins', 'isindex',
'keygen', 'kbd', 'label', 'layer',
'legend', 'li', 'limittext',
'link', 'listing',
'map', 'marquee', 'menu',
'meta', 'multicol', 'nobr',
'noembed', 'noframes', 'noscript',
'nosmartquotes', 'object', 'ol',
'optgroup', 'option',
'param', 'plaintext', 'pre',
'rt', 'ruby', 's', 'samp',
'script', 'select', 'server',
'shadow', 'sidebar', 'small',
'spacer', 'span', 'strike',
'strong', 'style', 'sub', 'sup',
'table', 'tbody', 'td', 'textarea',
'tfoot', 'th', 'thead', 'title',
'tr', 'tt', 'ul', 'var',
'wbr', 'xml',
'xmp', '!DOCTYPE', '!--'
);
foreach ($html_tags as $tag)
{
// A tag is '<tagname ', so we need to add < and a space
or '<tagname>'
if (stristr($xss_check, '<' . $tag . ' ') ||
stristr($xss_check, '<' . $tag . '>'))
{
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_WARNIEXSS'),
'error');
return false;
}
}
return true;
}
}
PK��[�_vvhelpers/templates.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Templates component helper.
*
* @since 1.6
*/
class TemplatesHelper
{
/**
* Configure the Linkbar.
*
* @param string $vName The name of the active view.
*
* @return void
*/
public static function addSubmenu($vName)
{
JHtmlSidebar::addEntry(
JText::_('COM_TEMPLATES_SUBMENU_STYLES'),
'index.php?option=com_templates&view=styles',
$vName == 'styles'
);
JHtmlSidebar::addEntry(
JText::_('COM_TEMPLATES_SUBMENU_TEMPLATES'),
'index.php?option=com_templates&view=templates',
$vName == 'templates'
);
}
/**
* Gets a list of the actions that can be performed.
*
* @return JObject
*
* @deprecated 3.2 Use JHelperContent::getActions() instead
*/
public static function getActions()
{
// Log usage of deprecated function
try
{
JLog::add(
sprintf('%s() is deprecated. Use JHelperContent::getActions() with
new arguments order instead.', __METHOD__),
JLog::WARNING,
'deprecated'
);
}
catch (RuntimeException $exception)
{
// Informational log only
}
// Get list of actions
return JHelperContent::getActions('com_templates');
}
/**
* Get a list of filter options for the application clients.
*
* @return array An array of JHtmlOption elements.
*/
public static function getClientOptions()
{
// Build the filter options.
$options = array();
$options[] = JHtml::_('select.option', '0',
JText::_('JSITE'));
$options[] = JHtml::_('select.option', '1',
JText::_('JADMINISTRATOR'));
return $options;
}
/**
* Get a list of filter options for the templates with styles.
*
* @param mixed $clientId The CMS client id (0:site | 1:administrator)
or '*' for all.
*
* @return array An array of JHtmlOption elements.
*/
public static function getTemplateOptions($clientId = '*')
{
// Build the filter options.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName('element',
'value'))
->select($db->quoteName('name', 'text'))
->select($db->quoteName('extension_id',
'e_id'))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('type') . ' = ' .
$db->quote('template'))
->where($db->quoteName('enabled') . ' = 1')
->order($db->quoteName('client_id') . ' ASC')
->order($db->quoteName('name') . ' ASC');
if ($clientId != '*')
{
$query->where($db->quoteName('client_id') . ' =
' . (int) $clientId);
}
$db->setQuery($query);
$options = $db->loadObjectList();
return $options;
}
/**
* TODO
*
* @param string $templateBaseDir TODO
* @param string $templateDir TODO
*
* @return boolean|JObject
*/
public static function parseXMLTemplateFile($templateBaseDir,
$templateDir)
{
$data = new JObject;
// Check of the xml file exists
$filePath = JPath::clean($templateBaseDir . '/templates/' .
$templateDir . '/templateDetails.xml');
if (is_file($filePath))
{
$xml = JInstaller::parseXMLInstallFile($filePath);
if ($xml['type'] != 'template')
{
return false;
}
foreach ($xml as $key => $value)
{
$data->set($key, $value);
}
}
return $data;
}
/**
* TODO
*
* @param integer $clientId TODO
* @param string $templateDir TODO
*
* @return boolean|array
*
* @since 3.0
*/
public static function getPositions($clientId, $templateDir)
{
$positions = array();
$templateBaseDir = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE;
$filePath = JPath::clean($templateBaseDir . '/templates/' .
$templateDir . '/templateDetails.xml');
if (is_file($filePath))
{
// Read the file to see if it's a valid component XML file
$xml = simplexml_load_file($filePath);
if (!$xml)
{
return false;
}
// Check for a valid XML root tag.
// Extensions use 'extension' as the root tag. Languages use
'metafile' instead
if ($xml->getName() != 'extension' &&
$xml->getName() != 'metafile')
{
unset($xml);
return false;
}
$positions = (array) $xml->positions;
if (isset($positions['position']))
{
$positions = (array) $positions['position'];
}
else
{
$positions = array();
}
}
return $positions;
}
}
PK��[ԉ���"models/fields/templatelocation.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
JLoader::register('TemplatesHelper', JPATH_ADMINISTRATOR .
'/components/com_templates/helpers/templates.php');
JFormHelper::loadFieldClass('list');
/**
* Template Location field.
*
* @since 3.5
*/
class JFormFieldTemplateLocation extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 3.5
*/
protected $type = 'TemplateLocation';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 3.5
*/
public function getOptions()
{
$options = TemplatesHelper::getClientOptions();
return array_merge(parent::getOptions(), $options);
}
}
PK��[����models/fields/templatename.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
JLoader::register('TemplatesHelper', JPATH_ADMINISTRATOR .
'/components/com_templates/helpers/templates.php');
JFormHelper::loadFieldClass('list');
/**
* Template Name field.
*
* @since 3.5
*/
class JFormFieldTemplateName extends JFormFieldList
{
/**
* The form field type.
*
* @var string
* @since 3.5
*/
protected $type = 'TemplateName';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.6
*/
public function getOptions()
{
// Get the client_id filter from the user state.
$clientId =
JFactory::getApplication()->getUserStateFromRequest('com_templates.styles.client_id',
'client_id', '0', 'string');
// Get the templates for the selected client_id.
$options = TemplatesHelper::getTemplateOptions($clientId);
// Merge into the parent options.
return array_merge(parent::getOptions(), $options);
}
}
PK��[e�D���models/forms/filter_styles.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fieldset
addfieldpath="/administrator/components/com_templates/models/fields"
/>
<field
name="client_id"
type="list"
filtermode="selector"
onchange="jQuery('#filter_search, select[id^=filter_],
#list_fullordering').val('');this.form.submit();"
>
<option value="0">JSITE</option>
<option value="1">JADMINISTRATOR</option>
</field>
<fields name="filter">
<field
name="search"
type="text"
inputmode="search"
label="JSEARCH_FILTER"
description="COM_TEMPLATES_STYLES_FILTER_SEARCH_DESC"
hint="JSEARCH_FILTER"
noresults="COM_TEMPLATES_MSG_MANAGE_NO_STYLES"
/>
<field
name="menuitem"
type="menuitem"
label="COM_TEMPLATES_OPTION_SELECT_MENU_ITEM"
disable="separator,alias,heading,url"
showon="client_id:0"
onchange="this.form.submit();"
>
<option value="">COM_TEMPLATES_OPTION_SELECT_MENU_ITEM</option>
<option value="-1">COM_TEMPLATES_OPTION_NONE</option>
</field>
<field
name="template"
type="templatename"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_TEMPLATE</option>
</field>
</fields>
<fields name="list">
<field
name="fullordering"
type="list"
label="JGLOBAL_SORT_BY"
description="JGLOBAL_SORT_BY"
onchange="this.form.submit();"
default="a.template ASC"
validate="options"
>
<option value="">JGLOBAL_SORT_BY</option>
<option value="a.title
ASC">COM_TEMPLATES_HEADING_STYLE_ASC</option>
<option value="a.title
DESC">COM_TEMPLATES_HEADING_STYLE_DESC</option>
<option value="a.home
ASC">COM_TEMPLATES_HEADING_DEFAULT_ASC</option>
<option value="a.home
DESC">COM_TEMPLATES_HEADING_DEFAULT_DESC</option>
<option value="a.template
ASC">COM_TEMPLATES_HEADING_TEMPLATE_ASC</option>
<option value="a.template
DESC">COM_TEMPLATES_HEADING_TEMPLATE_DESC</option>
<option value="a.id
ASC">JGRID_HEADING_ID_ASC</option>
<option value="a.id
DESC">JGRID_HEADING_ID_DESC</option>
</field>
<field
name="limit"
type="limitbox"
label="JGLOBAL_LIMIT"
description="JGLOBAL_LIMIT"
class="input-mini"
default="25"
onchange="this.form.submit();"
/>
</fields>
</form>
PK��[fl�!models/forms/filter_templates.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fieldset
addfieldpath="/administrator/components/com_templates/models/fields"
/>
<field
name="client_id"
type="list"
filtermode="selector"
onchange="jQuery('#filter_search, select[id^=filter_],
#list_fullordering').val('');this.form.submit();"
>
<option value="0">JSITE</option>
<option value="1">JADMINISTRATOR</option>
</field>
<fields name="filter">
<field
name="search"
type="text"
inputmode="search"
label="JSEARCH_FILTER"
description="COM_TEMPLATES_TEMPLATES_FILTER_SEARCH_DESC"
hint="JSEARCH_FILTER"
noresults="COM_TEMPLATES_MSG_MANAGE_NO_TEMPLATES"
/>
</fields>
<fields name="list">
<field
name="fullordering"
type="list"
label="JGLOBAL_SORT_BY"
description="JGLOBAL_SORT_BY"
onchange="this.form.submit();"
default="a.element ASC"
validate="options"
>
<option value="">JGLOBAL_SORT_BY</option>
<option value="a.element
ASC">COM_TEMPLATES_HEADING_TEMPLATE_ASC</option>
<option value="a.element
DESC">COM_TEMPLATES_HEADING_TEMPLATE_DESC</option>
</field>
<field
name="limit"
type="limitbox"
label="JGLOBAL_LIMIT"
description="JGLOBAL_LIMIT"
class="input-mini"
default="25"
onchange="this.form.submit();"
/>
</fields>
</form>
PK��[�_��models/forms/source.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="extension_id"
type="hidden"
/>
<field
name="filename"
type="hidden"
/>
<field
name="source"
type="editor"
label="COM_TEMPLATES_FIELD_SOURCE_LABEL"
description="COM_TEMPLATES_FIELD_SOURCE_DESC"
editor="codemirror|none"
buttons="no"
height="500px"
rows="20"
cols="80"
syntax="php"
filter="raw"
/>
</fieldset>
</form>
PK��[[U�r��models/forms/style.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="id"
type="number"
label="JGLOBAL_FIELD_ID_LABEL"
description="JGLOBAL_FIELD_ID_DESC"
id="id"
default="0"
readonly="true"
class="readonly"
/>
<field
name="template"
type="text"
label="COM_TEMPLATES_FIELD_TEMPLATE_LABEL"
description="COM_TEMPLATES_FIELD_TEMPLATE_DESC"
class="readonly"
size="30"
readonly="true"
/>
<field
name="client_id"
type="hidden"
label="COM_TEMPLATES_FIELD_CLIENT_LABEL"
description="COM_TEMPLATES_FIELD_CLIENT_DESC"
class="readonly"
default="0"
readonly="true"
/>
<field
name="title"
type="text"
label="COM_TEMPLATES_FIELD_TITLE_LABEL"
description="COM_TEMPLATES_FIELD_TITLE_DESC"
class="input-xxlarge input-large-text"
size="50"
required="true"
/>
<field
name="assigned"
type="hidden"
/>
</fieldset>
</form>
PK��[���gg$models/forms/style_administrator.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="home"
type="radio"
label="COM_TEMPLATES_FIELD_HOME_LABEL"
description="COM_TEMPLATES_FIELD_HOME_ADMINISTRATOR_DESC"
class="btn-group btn-group-yesno"
default="0"
>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
</fieldset>
</form>
PK��[���CCmodels/forms/style_site.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="home"
type="contentlanguage"
label="COM_TEMPLATES_FIELD_HOME_LABEL"
description="COM_TEMPLATES_FIELD_HOME_SITE_DESC"
default="0"
>
<option value="0">JNO</option>
<option value="1">JALL</option>
</field>
</fieldset>
</form>
PK��[3�3��F�Fmodels/style.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\Registry\Registry;
use Joomla\String\StringHelper;
use Joomla\Utilities\ArrayHelper;
/**
* Template style model.
*
* @since 1.6
*/
class TemplatesModelStyle extends JModelAdmin
{
/**
* The help screen key for the module.
*
* @var string
* @since 1.6
*/
protected $helpKey =
'JHELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES_EDIT';
/**
* The help screen base URL for the module.
*
* @var string
* @since 1.6
*/
protected $helpURL;
/**
* Item cache.
*
* @var array
* @since 1.6
*/
private $_cache = array();
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*/
public function __construct($config = array())
{
$config = array_merge(
array(
'event_before_delete' =>
'onExtensionBeforeDelete',
'event_after_delete' =>
'onExtensionAfterDelete',
'event_before_save' =>
'onExtensionBeforeSave',
'event_after_save' => 'onExtensionAfterSave',
'events_map' => array('delete' =>
'extension', 'save' => 'extension')
), $config
);
parent::__construct($config);
}
/**
* Method to auto-populate the model state.
*
* @note Calling getState in this method will result in recursion.
*
* @return void
*
* @since 1.6
*/
protected function populateState()
{
$app = JFactory::getApplication('administrator');
// Load the User state.
$pk = $app->input->getInt('id');
$this->setState('style.id', $pk);
// Load the parameters.
$params = JComponentHelper::getParams('com_templates');
$this->setState('params', $params);
}
/**
* Method to delete rows.
*
* @param array &$pks An array of item ids.
*
* @return boolean Returns true on success, false on failure.
*
* @since 1.6
* @throws Exception
*/
public function delete(&$pks)
{
$pks = (array) $pks;
$user = JFactory::getUser();
$table = $this->getTable();
$dispatcher = JEventDispatcher::getInstance();
$context = $this->option . '.' . $this->name;
JPluginHelper::importPlugin($this->events_map['delete']);
// Iterate the items to delete each one.
foreach ($pks as $pk)
{
if ($table->load($pk))
{
// Access checks.
if (!$user->authorise('core.delete',
'com_templates'))
{
throw new
Exception(JText::_('JERROR_CORE_DELETE_NOT_PERMITTED'));
}
// You should not delete a default style
if ($table->home != '0')
{
JError::raiseWarning(500,
JText::_('COM_TEMPLATES_STYLE_CANNOT_DELETE_DEFAULT_STYLE'));
return false;
}
// Trigger the before delete event.
$result = $dispatcher->trigger($this->event_before_delete,
array($context, $table));
if (in_array(false, $result, true) || !$table->delete($pk))
{
$this->setError($table->getError());
return false;
}
// Trigger the after delete event.
$dispatcher->trigger($this->event_after_delete, array($context,
$table));
}
else
{
$this->setError($table->getError());
return false;
}
}
// Clean cache
$this->cleanCache();
return true;
}
/**
* Method to duplicate styles.
*
* @param array &$pks An array of primary key IDs.
*
* @return boolean True if successful.
*
* @throws Exception
*/
public function duplicate(&$pks)
{
$user = JFactory::getUser();
// Access checks.
if (!$user->authorise('core.create',
'com_templates'))
{
throw new
Exception(JText::_('JERROR_CORE_CREATE_NOT_PERMITTED'));
}
$dispatcher = JEventDispatcher::getInstance();
$context = $this->option . '.' . $this->name;
// Include the plugins for the save events.
JPluginHelper::importPlugin($this->events_map['save']);
$table = $this->getTable();
foreach ($pks as $pk)
{
if ($table->load($pk, true))
{
// Reset the id to create a new record.
$table->id = 0;
// Reset the home (don't want dupes of that field).
$table->home = 0;
// Alter the title.
$m = null;
$table->title = $this->generateNewTitle(null, null,
$table->title);
if (!$table->check())
{
throw new Exception($table->getError());
}
// Trigger the before save event.
$result = $dispatcher->trigger($this->event_before_save,
array($context, &$table, true));
if (in_array(false, $result, true) || !$table->store())
{
throw new Exception($table->getError());
}
// Trigger the after save event.
$dispatcher->trigger($this->event_after_save, array($context,
&$table, true));
}
else
{
throw new Exception($table->getError());
}
}
// Clean cache
$this->cleanCache();
return true;
}
/**
* Method to change the title.
*
* @param integer $categoryId The id of the category.
* @param string $alias The alias.
* @param string $title The title.
*
* @return string New title.
*
* @since 1.7.1
*/
protected function generateNewTitle($categoryId, $alias, $title)
{
// Alter the title
$table = $this->getTable();
while ($table->load(array('title' => $title)))
{
$title = StringHelper::increment($title);
}
return $title;
}
/**
* 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 JForm A JForm object on success, false on failure
*
* @since 1.6
*/
public function getForm($data = array(), $loadData = true)
{
// The folder and element vars are passed when saving the form.
if (empty($data))
{
$item = $this->getItem();
$clientId = $item->client_id;
$template = $item->template;
}
else
{
$clientId = ArrayHelper::getValue($data, 'client_id');
$template = ArrayHelper::getValue($data, 'template');
}
// Add the default fields directory
$baseFolder = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE;
JForm::addFieldPath($baseFolder . '/templates/' . $template .
'/field');
// These variables are used to add data from the plugin XML files.
$this->setState('item.client_id', $clientId);
$this->setState('item.template', $template);
// Get the form.
$form = $this->loadForm('com_templates.style',
'style', array('control' => 'jform',
'load_data' => $loadData));
if (empty($form))
{
return false;
}
// Modify the form based on access controls.
if (!$this->canEditState((object) $data))
{
// Disable fields for display.
$form->setFieldAttribute('home', 'disabled',
'true');
// Disable fields while saving.
// The controller has already verified this is a record you can edit.
$form->setFieldAttribute('home', 'filter',
'unset');
}
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_templates.edit.style.data',
array());
if (empty($data))
{
$data = $this->getItem();
}
$this->preprocessData('com_templates.style', $data);
return $data;
}
/**
* Method to get a single record.
*
* @param integer $pk The id of the primary key.
*
* @return mixed Object on success, false on failure.
*/
public function getItem($pk = null)
{
$pk = (!empty($pk)) ? $pk : (int)
$this->getState('style.id');
if (!isset($this->_cache[$pk]))
{
// Get a row instance.
$table = $this->getTable();
// Attempt to load the row.
$return = $table->load($pk);
// Check for a table object error.
if ($return === false && $table->getError())
{
$this->setError($table->getError());
return false;
}
// Convert to the JObject before adding other data.
$properties = $table->getProperties(1);
$this->_cache[$pk] = ArrayHelper::toObject($properties,
'JObject');
// Convert the params field to an array.
$registry = new Registry($table->params);
$this->_cache[$pk]->params = $registry->toArray();
// Get the template XML.
$client = JApplicationHelper::getClientInfo($table->client_id);
$path = JPath::clean($client->path . '/templates/' .
$table->template . '/templateDetails.xml');
if (file_exists($path))
{
$this->_cache[$pk]->xml = simplexml_load_file($path);
}
else
{
$this->_cache[$pk]->xml = null;
}
}
return $this->_cache[$pk];
}
/**
* Returns a reference to the 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
*/
public function getTable($type = 'Style', $prefix =
'TemplatesTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Method to allow derived classes to preprocess the form.
*
* @param JForm $form A JForm 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 1.6
* @throws Exception if there is an error in the form event.
*/
protected function preprocessForm(JForm $form, $data, $group =
'content')
{
$clientId = $this->getState('item.client_id');
$template = $this->getState('item.template');
$lang = JFactory::getLanguage();
$client = JApplicationHelper::getClientInfo($clientId);
if (!$form->loadFile('style_' . $client->name, true))
{
throw new Exception(JText::_('JERROR_LOADFILE_FAILED'));
}
jimport('joomla.filesystem.path');
$formFile = JPath::clean($client->path . '/templates/' .
$template . '/templateDetails.xml');
// Load the core and/or local language file(s).
$lang->load('tpl_' . $template, $client->path, null,
false, true)
|| $lang->load('tpl_' . $template, $client->path .
'/templates/' . $template, null, false, true);
if (file_exists($formFile))
{
// Get the template form.
if (!$form->loadFile($formFile, false, '//config'))
{
throw new Exception(JText::_('JERROR_LOADFILE_FAILED'));
}
}
// Disable home field if it is default style
if ((is_array($data) && array_key_exists('home', $data)
&& $data['home'] == '1')
|| (is_object($data) && isset($data->home) &&
$data->home == '1'))
{
$form->setFieldAttribute('home', 'readonly',
'true');
}
// Attempt to load the xml file.
if (!$xml = simplexml_load_file($formFile))
{
throw new Exception(JText::_('JERROR_LOADFILE_FAILED'));
}
// Get the help data from the XML file if present.
$help = $xml->xpath('/extension/help');
if (!empty($help))
{
$helpKey = trim((string) $help[0]['key']);
$helpURL = trim((string) $help[0]['url']);
$this->helpKey = $helpKey ?: $this->helpKey;
$this->helpURL = $helpURL ?: $this->helpURL;
}
// Trigger the default form events.
parent::preprocessForm($form, $data, $group);
}
/**
* Method to save the form data.
*
* @param array $data The form data.
*
* @return boolean True on success.
*/
public function save($data)
{
// Detect disabled extension
$extension = JTable::getInstance('Extension');
if ($extension->load(array('enabled' => 0,
'type' => 'template', 'element' =>
$data['template'], 'client_id' =>
$data['client_id'])))
{
$this->setError(JText::_('COM_TEMPLATES_ERROR_SAVE_DISABLED_TEMPLATE'));
return false;
}
$app = JFactory::getApplication();
$dispatcher = JEventDispatcher::getInstance();
$table = $this->getTable();
$pk = (!empty($data['id'])) ? $data['id'] :
(int) $this->getState('style.id');
$isNew = true;
// Include the extension plugins for the save events.
JPluginHelper::importPlugin($this->events_map['save']);
// Load the row if saving an existing record.
if ($pk > 0)
{
$table->load($pk);
$isNew = false;
}
if ($app->input->get('task') == 'save2copy')
{
$data['title'] = $this->generateNewTitle(null, null,
$data['title']);
$data['home'] = 0;
$data['assigned'] = '';
}
// Bind the data.
if (!$table->bind($data))
{
$this->setError($table->getError());
return false;
}
// Prepare the row for saving
$this->prepareTable($table);
// Check the data.
if (!$table->check())
{
$this->setError($table->getError());
return false;
}
// Trigger the before save event.
$result = $dispatcher->trigger($this->event_before_save,
array('com_templates.style', &$table, $isNew));
// Store the data.
if (in_array(false, $result, true) || !$table->store())
{
$this->setError($table->getError());
return false;
}
$user = JFactory::getUser();
if ($user->authorise('core.edit', 'com_menus')
&& $table->client_id == 0)
{
$n = 0;
$db = $this->getDbo();
$user = JFactory::getUser();
if (!empty($data['assigned']) &&
is_array($data['assigned']))
{
$data['assigned'] =
ArrayHelper::toInteger($data['assigned']);
// Update the mapping for menu items that this style IS assigned to.
$query = $db->getQuery(true)
->update('#__menu')
->set('template_style_id = ' . (int) $table->id)
->where('id IN (' . implode(',',
$data['assigned']) . ')')
->where('template_style_id != ' . (int) $table->id)
->where('checked_out IN (0,' . (int) $user->id .
')');
$db->setQuery($query);
$db->execute();
$n += $db->getAffectedRows();
}
// Remove style mappings for menu items this style is NOT assigned to.
// If unassigned then all existing maps will be removed.
$query = $db->getQuery(true)
->update('#__menu')
->set('template_style_id = 0');
if (!empty($data['assigned']))
{
$query->where('id NOT IN (' . implode(',',
$data['assigned']) . ')');
}
$query->where('template_style_id = ' . (int) $table->id)
->where('checked_out IN (0,' . (int) $user->id .
')');
$db->setQuery($query);
$db->execute();
$n += $db->getAffectedRows();
if ($n > 0)
{
$app->enqueueMessage(JText::plural('COM_TEMPLATES_MENU_CHANGED',
$n));
}
}
// Clean the cache.
$this->cleanCache();
// Trigger the after save event.
$dispatcher->trigger($this->event_after_save,
array('com_templates.style', &$table, $isNew));
$this->setState('style.id', $table->id);
return true;
}
/**
* Method to set a template style as home.
*
* @param integer $id The primary key ID for the style.
*
* @return boolean True if successful.
*
* @throws Exception
*/
public function setHome($id = 0)
{
$user = JFactory::getUser();
$db = $this->getDbo();
// Access checks.
if (!$user->authorise('core.edit.state',
'com_templates'))
{
throw new
Exception(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'));
}
$style = JTable::getInstance('Style',
'TemplatesTable');
if (!$style->load((int) $id))
{
throw new
Exception(JText::_('COM_TEMPLATES_ERROR_STYLE_NOT_FOUND'));
}
// Detect disabled extension
$extension = JTable::getInstance('Extension');
if ($extension->load(array('enabled' => 0,
'type' => 'template', 'element' =>
$style->template, 'client_id' => $style->client_id)))
{
throw new
Exception(JText::_('COM_TEMPLATES_ERROR_SAVE_DISABLED_TEMPLATE'));
}
// Reset the home fields for the client_id.
$query = $db->getQuery(true)
->update('#__template_styles')
->set('home = ' . $db->q('0'))
->where('client_id = ' . (int) $style->client_id)
->where('home = ' . $db->q('1'));
$db->setQuery($query);
$db->execute();
// Set the new home style.
$query = $db->getQuery(true)
->update('#__template_styles')
->set('home = ' . $db->q('1'))
->where('id = ' . (int) $id);
$db->setQuery($query);
$db->execute();
// Clean the cache.
$this->cleanCache();
return true;
}
/**
* Method to unset a template style as default for a language.
*
* @param integer $id The primary key ID for the style.
*
* @return boolean True if successful.
*
* @throws Exception
*/
public function unsetHome($id = 0)
{
$user = JFactory::getUser();
$db = $this->getDbo();
// Access checks.
if (!$user->authorise('core.edit.state',
'com_templates'))
{
throw new
Exception(JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'));
}
// Lookup the client_id.
$query = $db->getQuery(true)
->select('client_id, home')
->from('#__template_styles')
->where('id = ' . (int) $id);
$db->setQuery($query);
$style = $db->loadObject();
if (!is_numeric($style->client_id))
{
throw new
Exception(JText::_('COM_TEMPLATES_ERROR_STYLE_NOT_FOUND'));
}
elseif ($style->home == '1')
{
throw new
Exception(JText::_('COM_TEMPLATES_ERROR_CANNOT_UNSET_DEFAULT_STYLE'));
}
// Set the new home style.
$query = $db->getQuery(true)
->update('#__template_styles')
->set('home = ' . $db->q('0'))
->where('id = ' . (int) $id);
$db->setQuery($query);
$db->execute();
// Clean the cache.
$this->cleanCache();
return true;
}
/**
* Get the necessary data to load an item help screen.
*
* @return object An object with key, url, and local properties for
loading the item help screen.
*
* @since 1.6
*/
public function getHelp()
{
return (object) array('key' => $this->helpKey,
'url' => $this->helpURL);
}
/**
* Custom clean cache method
*
* @param string $group The cache group
* @param integer $clientId The ID of the client
*
* @return void
*
* @since 1.6
*/
protected function cleanCache($group = null, $clientId = 0)
{
parent::cleanCache('com_templates');
parent::cleanCache('_system');
}
}
PK��[��models/styles.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\String\StringHelper;
/**
* Methods supporting a list of template style records.
*
* @since 1.6
*/
class TemplatesModelStyles extends JModelList
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JControllerLegacy
* @since 1.6
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'title', 'a.title',
'template', 'a.template',
'home', 'a.home',
'menuitem',
);
}
parent::__construct($config);
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @since 1.6
*/
protected function populateState($ordering = 'a.template',
$direction = 'asc')
{
// Load the filter state.
$this->setState('filter.search',
$this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search', '',
'string'));
$this->setState('filter.template',
$this->getUserStateFromRequest($this->context .
'.filter.template', 'filter_template', '',
'string'));
$this->setState('filter.menuitem',
$this->getUserStateFromRequest($this->context .
'.filter.menuitem', 'filter_menuitem', '',
'cmd'));
// Special case for the client id.
$clientId = (int) $this->getUserStateFromRequest($this->context .
'.client_id', 'client_id', 0, 'int');
$clientId = (!in_array($clientId, array (0, 1))) ? 0 : $clientId;
$this->setState('client_id', $clientId);
// Load the parameters.
$params = JComponentHelper::getParams('com_templates');
$this->setState('params', $params);
// List state information.
parent::populateState($ordering, $direction);
}
/**
* Method to get a store id based on model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id A prefix for the store id.
*
* @return string A store id.
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('client_id');
$id .= ':' . $this->getState('filter.search');
$id .= ':' . $this->getState('filter.template');
$id .= ':' . $this->getState('filter.menuitem');
return parent::getStoreId($id);
}
/**
* Build an SQL query to load the list data.
*
* @return JDatabaseQuery
*/
protected function getListQuery()
{
$clientId = (int) $this->getState('client_id');
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query->select(
$this->getState(
'list.select',
'a.id, a.template, a.title, a.home, a.client_id, l.title AS
language_title, l.image as image, l.sef AS language_sef'
)
);
$query->from($db->quoteName('#__template_styles',
'a'))
->where($db->quoteName('a.client_id') . ' = '
. $clientId);
// Join on menus.
$query->select('COUNT(m.template_style_id) AS assigned')
->join('LEFT', $db->quoteName('#__menu',
'm') . ' ON ' .
$db->quoteName('m.template_style_id') . ' = ' .
$db->quoteName('a.id'))
->group('a.id, a.template, a.title, a.home, a.client_id,
l.title, l.image, e.extension_id, l.sef');
// Join over the language.
$query->join('LEFT',
$db->quoteName('#__languages', 'l') . ' ON
' . $db->quoteName('l.lang_code') . ' = ' .
$db->quoteName('a.home'));
// Filter by extension enabled.
$query->select($db->quoteName('extension_id',
'e_id'))
->join('LEFT', $db->quoteName('#__extensions',
'e') . ' ON e.element = a.template AND e.client_id =
a.client_id')
->where($db->quoteName('e.enabled') . ' = 1')
->where($db->quoteName('e.type') . ' = ' .
$db->quote('template'));
// Filter by template.
if ($template = $this->getState('filter.template'))
{
$query->where($db->quoteName('a.template') . ' =
' . $db->quote($template));
}
// Filter by menuitem.
$menuItemId = $this->getState('filter.menuitem');
if ($clientId === 0 && is_numeric($menuItemId))
{
// If user selected the templates styles that are not assigned to any
page.
if ((int) $menuItemId === -1)
{
// Only custom template styles overrides not assigned to any menu item.
$query->where($db->quoteName('a.home') . ' =
' . $db->quote(0))
->where($db->quoteName('m.id') . ' IS
NULL');
}
// If user selected the templates styles assigned to particular pages.
else
{
// Subquery to get the language of the selected menu item.
$menuItemLanguageSubQuery = $db->getQuery(true);
$menuItemLanguageSubQuery->select($db->quoteName('language'))
->from($db->quoteName('#__menu'))
->where($db->quoteName('id') . ' = ' .
$menuItemId);
// Subquery to get the language of the selected menu item.
$templateStylesMenuItemsSubQuery = $db->getQuery(true);
$templateStylesMenuItemsSubQuery->select($db->quoteName('id'))
->from($db->quoteName('#__menu'))
->where($db->quoteName('template_style_id') . ' =
' . $db->quoteName('a.id'));
// Main query where clause.
$query->where('(' .
// Default template style (fallback template style to all menu items).
$db->quoteName('a.home') . ' = ' .
$db->quote(1) . ' OR ' .
// Default template style for specific language (fallback template
style to the selected menu item language).
$db->quoteName('a.home') . ' IN (' .
$menuItemLanguageSubQuery . ') OR ' .
// Custom template styles override (only if assigned to the selected
menu item).
'(' . $db->quoteName('a.home') . ' =
' . $db->quote(0) . ' AND ' . $menuItemId . ' IN
(' . $templateStylesMenuItemsSubQuery . '))' .
')'
);
}
}
// Filter by search in title.
if ($search = $this->getState('filter.search'))
{
if (stripos($search, 'id:') === 0)
{
$query->where($db->quoteName('a.id') . ' = '
. (int) substr($search, 3));
}
else
{
$search = $db->quote('%' .
StringHelper::strtolower($search) . '%');
$query->where('(' . ' LOWER(a.template) LIKE ' .
$search . ' OR LOWER(a.title) LIKE ' . $search . ')');
}
}
// Add the list ordering clause.
$query->order($db->escape($this->getState('list.ordering',
'a.template')) . ' ' .
$db->escape($this->getState('list.direction',
'ASC')));
return $query;
}
}
PK��[���C��models/template.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Template model class.
*
* @since 1.6
*/
class TemplatesModelTemplate extends JModelForm
{
/**
* The information in a template
*
* @var stdClass
* @since 1.6
*/
protected $template = null;
/**
* The path to the template
*
* @var stdClass
* @since 3.2
*/
protected $element = null;
/**
* Internal method to get file properties.
*
* @param string $path The base path.
* @param string $name The file name.
*
* @return object
*
* @since 1.6
*/
protected function getFile($path, $name)
{
$temp = new stdClass;
if ($template = $this->getTemplate())
{
$temp->name = $name;
$temp->id = urlencode(base64_encode($path . $name));
return $temp;
}
}
/**
* Method to get a list of all the files to edit in a template.
*
* @return array A nested array of relevant files.
*
* @since 1.6
*/
public function getFiles()
{
$result = array();
if ($template = $this->getTemplate())
{
jimport('joomla.filesystem.folder');
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/');
$lang = JFactory::getLanguage();
// Load the core and/or local language file(s).
$lang->load('tpl_' . $template->element,
$client->path, null, false, true) ||
$lang->load('tpl_' . $template->element,
$client->path . '/templates/' . $template->element, null,
false, true);
$this->element = $path;
if (!is_writable($path))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_DIRECTORY_NOT_WRITABLE'),
'error');
}
if (is_dir($path))
{
$result = $this->getDirectoryTree($path);
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_TEMPLATE_FOLDER_NOT_FOUND'),
'error');
return false;
}
}
return $result;
}
/**
* Get the directory tree.
*
* @param string $dir The path of the directory to scan
*
* @return array
*
* @since 3.2
*/
public function getDirectoryTree($dir)
{
$result = array();
$dirFiles = scandir($dir);
foreach ($dirFiles as $key => $value)
{
if (!in_array($value, array('.', '..')))
{
if (is_dir($dir . $value))
{
$relativePath = str_replace($this->element, '', $dir .
$value);
$result['/' . $relativePath] =
$this->getDirectoryTree($dir . $value . '/');
}
else
{
$ext = pathinfo($dir . $value, PATHINFO_EXTENSION);
$allowedFormat = $this->checkFormat($ext);
if ($allowedFormat == true)
{
$relativePath = str_replace($this->element, '', $dir);
$info = $this->getFile('/' . $relativePath, $value);
$result[] = $info;
}
}
}
}
return $result;
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @return void
*
* @since 1.6
*/
protected function populateState()
{
jimport('joomla.filesystem.file');
$app = JFactory::getApplication('administrator');
// Load the User state.
$pk = $app->input->getInt('id');
$this->setState('extension.id', $pk);
// Load the parameters.
$params = JComponentHelper::getParams('com_templates');
$this->setState('params', $params);
}
/**
* Method to get the template information.
*
* @return mixed Object if successful, false if not and internal error
is set.
*
* @since 1.6
*/
public function &getTemplate()
{
if (empty($this->template))
{
$pk = $this->getState('extension.id');
$db = $this->getDbo();
$app = JFactory::getApplication();
// Get the template information.
$query = $db->getQuery(true)
->select('extension_id, client_id, element, name,
manifest_cache')
->from('#__extensions')
->where($db->quoteName('extension_id') . ' =
' . (int) $pk)
->where($db->quoteName('type') . ' = ' .
$db->quote('template'));
$db->setQuery($query);
try
{
$result = $db->loadObject();
}
catch (RuntimeException $e)
{
$app->enqueueMessage($e->getMessage(), 'warning');
$this->template = false;
return false;
}
if (empty($result))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EXTENSION_RECORD_NOT_FOUND'),
'error');
$this->template = false;
}
else
{
$this->template = $result;
}
}
return $this->template;
}
/**
* Method to check if new template name already exists
*
* @return boolean true if name is not used, false otherwise
*
* @since 2.5
*/
public function checkNewName()
{
$db = $this->getDbo();
$query = $db->getQuery(true)
->select('COUNT(*)')
->from('#__extensions')
->where('name = ' .
$db->quote($this->getState('new_name')));
$db->setQuery($query);
return ($db->loadResult() == 0);
}
/**
* Method to check if new template name already exists
*
* @return string name of current template
*
* @since 2.5
*/
public function getFromName()
{
return $this->getTemplate()->element;
}
/**
* Method to check if new template name already exists
*
* @return boolean true if name is not used, false otherwise
*
* @since 2.5
*/
public function copy()
{
$app = JFactory::getApplication();
if ($template = $this->getTemplate())
{
jimport('joomla.filesystem.folder');
$client = JApplicationHelper::getClientInfo($template->client_id);
$fromPath = JPath::clean($client->path . '/templates/' .
$template->element . '/');
// Delete new folder if it exists
$toPath = $this->getState('to_path');
if (JFolder::exists($toPath))
{
if (!JFolder::delete($toPath))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_COULD_NOT_WRITE'),
'error');
return false;
}
}
// Copy all files from $fromName template to $newName folder
if (!JFolder::copy($fromPath, $toPath) || !$this->fixTemplateName())
{
return false;
}
return true;
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_INVALID_FROM_NAME'),
'error');
return false;
}
}
/**
* Method to delete tmp folder
*
* @return boolean true if delete successful, false otherwise
*
* @since 2.5
*/
public function cleanup()
{
// Clear installation messages
$app = JFactory::getApplication();
$app->setUserState('com_installer.message', '');
$app->setUserState('com_installer.extension_message',
'');
// Delete temporary directory
return JFolder::delete($this->getState('to_path'));
}
/**
* Method to rename the template in the XML files and rename the language
files
*
* @return boolean true if successful, false otherwise
*
* @since 2.5
*/
protected function fixTemplateName()
{
// Rename Language files
// Get list of language files
$result = true;
$files = JFolder::files($this->getState('to_path'),
'.ini', true, true);
$newName = strtolower($this->getState('new_name'));
$template = $this->getTemplate();
$oldName = $template->element;
$manifest = json_decode($template->manifest_cache);
jimport('joomla.filesystem.file');
foreach ($files as $file)
{
$newFile = '/' . str_replace($oldName, $newName,
basename($file));
$result = JFile::move($file, dirname($file) . $newFile) &&
$result;
}
// Edit XML file
$xmlFile = $this->getState('to_path') .
'/templateDetails.xml';
if (JFile::exists($xmlFile))
{
$contents = file_get_contents($xmlFile);
$pattern[] = '#<name>\s*' . $manifest->name .
'\s*</name>#i';
$replace[] = '<name>' . $newName .
'</name>';
$pattern[] = '#<language(.*)' . $oldName .
'(.*)</language>#';
$replace[] = '<language${1}' . $newName .
'${2}</language>';
$contents = preg_replace($pattern, $replace, $contents);
$result = JFile::write($xmlFile, $contents) && $result;
}
return $result;
}
/**
* 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 JForm A JForm object on success, false on failure
*
* @since 1.6
*/
public function getForm($data = array(), $loadData = true)
{
$app = JFactory::getApplication();
// Codemirror or Editor None should be enabled
$db = $this->getDbo();
$query = $db->getQuery(true)
->select('COUNT(*)')
->from('#__extensions as a')
->where(
'(a.name =' .
$db->quote('plg_editors_codemirror') .
' AND a.enabled = 1) OR (a.name =' .
$db->quote('plg_editors_none') .
' AND a.enabled = 1)'
);
$db->setQuery($query);
$state = $db->loadResult();
if ((int) $state < 1)
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EDITOR_DISABLED'),
'warning');
}
// Get the form.
$form = $this->loadForm('com_templates.source',
'source', 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()
{
$data = $this->getSource();
$this->preprocessData('com_templates.source', $data);
return $data;
}
/**
* Method to get a single record.
*
* @return mixed Object on success, false on failure.
*
* @since 1.6
*/
public function &getSource()
{
$app = JFactory::getApplication();
$item = new stdClass;
if (!$this->template)
{
$this->getTemplate();
}
if ($this->template)
{
$input = JFactory::getApplication()->input;
$fileName = base64_decode($input->get('file'));
$client =
JApplicationHelper::getClientInfo($this->template->client_id);
try
{
$filePath = JPath::check($client->path . '/templates/' .
$this->template->element . '/' . $fileName);
}
catch (Exception $e)
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_FOUND'),
'error');
return;
}
if (file_exists($filePath))
{
$item->extension_id = $this->getState('extension.id');
$item->filename = $fileName;
$item->source = file_get_contents($filePath);
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_FOUND'),
'error');
}
}
return $item;
}
/**
* Method to store the source file contents.
*
* @param array $data The source data to save.
*
* @return boolean True on success, false otherwise and internal error
set.
*
* @since 1.6
*/
public function save($data)
{
jimport('joomla.filesystem.file');
// Get the template.
$template = $this->getTemplate();
if (empty($template))
{
return false;
}
$app = JFactory::getApplication();
$fileName = base64_decode($app->input->get('file'));
$client = JApplicationHelper::getClientInfo($template->client_id);
$filePath = JPath::clean($client->path . '/templates/' .
$template->element . '/' . $fileName);
// Include the extension plugins for the save events.
JPluginHelper::importPlugin('extension');
$user = get_current_user();
chown($filePath, $user);
JPath::setPermissions($filePath, '0644');
// Try to make the template file writable.
if (!is_writable($filePath))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_SOURCE_FILE_NOT_WRITABLE'),
'warning');
$app->enqueueMessage(JText::sprintf('COM_TEMPLATES_FILE_PERMISSIONS',
JPath::getPermissions($filePath)), 'warning');
if (!JPath::isOwner($filePath))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_CHECK_FILE_OWNERSHIP'),
'warning');
}
return false;
}
// Make sure EOL is Unix
$data['source'] = str_replace(array("\r\n",
"\r"), "\n", $data['source']);
$return = JFile::write($filePath, $data['source']);
if (!$return)
{
$app->enqueueMessage(JText::sprintf('COM_TEMPLATES_ERROR_FAILED_TO_SAVE_FILENAME',
$fileName), 'error');
return false;
}
// Get the extension of the changed file.
$explodeArray = explode('.', $fileName);
$ext = end($explodeArray);
if ($ext == 'less')
{
$app->enqueueMessage(JText::sprintf('COM_TEMPLATES_COMPILE_LESS',
$fileName));
}
return true;
}
/**
* Get overrides folder.
*
* @param string $name The name of override.
* @param string $path Location of override.
*
* @return object containing override name and path.
*
* @since 3.2
*/
public function getOverridesFolder($name,$path)
{
$folder = new stdClass;
$folder->name = $name;
$folder->path = base64_encode($path . $name);
return $folder;
}
/**
* Get a list of overrides.
*
* @return array containing overrides.
*
* @since 3.2
*/
public function getOverridesList()
{
if ($template = $this->getTemplate())
{
$client =
JApplicationHelper::getClientInfo($template->client_id);
$componentPath = JPath::clean($client->path .
'/components/');
$modulePath = JPath::clean($client->path . '/modules/');
$pluginPath = JPath::clean(JPATH_ROOT . '/plugins/');
$layoutPath = JPath::clean(JPATH_ROOT . '/layouts/');
$components = JFolder::folders($componentPath);
foreach ($components as $component)
{
if (file_exists($componentPath . '/' . $component .
'/views/'))
{
$viewPath = JPath::clean($componentPath . '/' . $component .
'/views/');
}
elseif (file_exists($componentPath . '/' . $component .
'/view/'))
{
$viewPath = JPath::clean($componentPath . '/' . $component .
'/view/');
}
else
{
$viewPath = '';
}
if ($viewPath)
{
$views = JFolder::folders($viewPath);
foreach ($views as $view)
{
// Only show the view has layout inside it
if (file_exists($viewPath . $view . '/tmpl'))
{
$result['components'][$component][] =
$this->getOverridesFolder($view, $viewPath);
}
}
}
}
foreach (JFolder::folders($pluginPath) as $pluginGroup)
{
foreach (JFolder::folders($pluginPath . '/' . $pluginGroup)
as $plugin)
{
if (file_exists($pluginPath . '/' . $pluginGroup .
'/' . $plugin . '/tmpl/'))
{
$pluginLayoutPath = JPath::clean($pluginPath . '/' .
$pluginGroup . '/');
$result['plugins'][$pluginGroup][] =
$this->getOverridesFolder($plugin, $pluginLayoutPath);
}
}
}
$modules = JFolder::folders($modulePath);
foreach ($modules as $module)
{
$result['modules'][] = $this->getOverridesFolder($module,
$modulePath);
}
$layoutFolders = JFolder::folders($layoutPath);
foreach ($layoutFolders as $layoutFolder)
{
$layoutFolderPath = JPath::clean($layoutPath . '/' .
$layoutFolder . '/');
$layouts = JFolder::folders($layoutFolderPath);
foreach ($layouts as $layout)
{
$result['layouts'][$layoutFolder][] =
$this->getOverridesFolder($layout, $layoutFolderPath);
}
}
// Check for layouts in component folders
foreach ($components as $component)
{
if (file_exists($componentPath . '/' . $component .
'/layouts/'))
{
$componentLayoutPath = JPath::clean($componentPath . '/' .
$component . '/layouts/');
if ($componentLayoutPath)
{
$layouts = JFolder::folders($componentLayoutPath);
foreach ($layouts as $layout)
{
$result['layouts'][$component][] =
$this->getOverridesFolder($layout, $componentLayoutPath);
}
}
}
}
}
if (!empty($result))
{
return $result;
}
}
/**
* Create overrides.
*
* @param string $override The override location.
*
* @return boolean true if override creation is successful, false
otherwise
*
* @since 3.2
*/
public function createOverride($override)
{
jimport('joomla.filesystem.folder');
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$explodeArray = explode(DIRECTORY_SEPARATOR, $override);
$name = end($explodeArray);
$client =
JApplicationHelper::getClientInfo($template->client_id);
if (stristr($name, 'mod_') != false)
{
$htmlPath = JPath::clean($client->path . '/templates/' .
$template->element . '/html/' . $name);
}
elseif (stristr($override, 'com_') != false)
{
$size = count($explodeArray);
$url = JPath::clean($explodeArray[$size - 3] . '/' .
$explodeArray[$size - 1]);
if ($explodeArray[$size - 2] == 'layouts')
{
$htmlPath = JPath::clean($client->path . '/templates/' .
$template->element . '/html/layouts/' . $url);
}
else
{
$htmlPath = JPath::clean($client->path . '/templates/' .
$template->element . '/html/' . $url);
}
}
elseif (stripos($override, JPath::clean(JPATH_ROOT .
'/plugins/')) === 0)
{
$size = count($explodeArray);
$layoutPath = JPath::clean('plg_' . $explodeArray[$size - 2]
. '_' . $explodeArray[$size - 1]);
$htmlPath = JPath::clean($client->path . '/templates/' .
$template->element . '/html/' . $layoutPath);
}
else
{
$layoutPath = implode('/', array_slice($explodeArray, -2));
$htmlPath = JPath::clean($client->path . '/templates/' .
$template->element . '/html/layouts/' . $layoutPath);
}
// Check Html folder, create if not exist
if (!JFolder::exists($htmlPath))
{
if (!JFolder::create($htmlPath))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_ERROR'),
'error');
return false;
}
}
if (stristr($name, 'mod_') != false)
{
$return = $this->createTemplateOverride(JPath::clean($override .
'/tmpl'), $htmlPath);
}
elseif (stristr($override, 'com_') != false &&
stristr($override, 'layouts') == false)
{
$return = $this->createTemplateOverride(JPath::clean($override .
'/tmpl'), $htmlPath);
}
elseif (stripos($override, JPath::clean(JPATH_ROOT .
'/plugins/')) === 0)
{
$return = $this->createTemplateOverride(JPath::clean($override .
'/tmpl'), $htmlPath);
}
else
{
$return = $this->createTemplateOverride($override, $htmlPath);
}
if ($return)
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_OVERRIDE_CREATED')
. str_replace(JPATH_ROOT, '', $htmlPath));
return true;
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_OVERRIDE_FAILED'),
'error');
return false;
}
}
}
/**
* Create override folder & file
*
* @param string $overridePath The override location
* @param string $htmlPath The html location
*
* @return boolean True on success. False otherwise.
*/
public function createTemplateOverride($overridePath, $htmlPath)
{
$return = false;
if (empty($overridePath) || empty($htmlPath))
{
return $return;
}
// Get list of template folders
$folders = JFolder::folders($overridePath, null, true, true);
if (!empty($folders))
{
foreach ($folders as $folder)
{
$htmlFolder = $htmlPath . str_replace($overridePath, '',
$folder);
if (!JFolder::exists($htmlFolder))
{
JFolder::create($htmlFolder);
}
}
}
// Get list of template files (Only get *.php file for template file)
$files = JFolder::files($overridePath, '.php', true, true);
if (empty($files))
{
return true;
}
foreach ($files as $file)
{
$overrideFilePath = str_replace($overridePath, '', $file);
$htmlFilePath = $htmlPath . $overrideFilePath;
if (JFile::exists($htmlFilePath))
{
// Generate new unique file name base on current time
$today = JFactory::getDate();
$htmlFilePath = JFile::stripExt($htmlFilePath) . '-' .
$today->format('Ymd-His') . '.' .
JFile::getExt($htmlFilePath);
}
$return = JFile::copy($file, $htmlFilePath, '', true);
}
return $return;
}
/**
* Compile less using the less compiler under /build.
*
* @param string $input The relative location of the less file.
*
* @return boolean true if compilation is successful, false otherwise
*
* @since 3.2
*/
public function compileLess($input)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client =
JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/'
. $template->element . '/');
$inFile = urldecode(base64_decode($input));
$explodeArray = explode('/', $inFile);
$fileName = end($explodeArray);
$outFile = current(explode('.', $fileName));
$less = new JLess;
$less->setFormatter(new JLessFormatterJoomla);
try
{
$less->compileFile($path . $inFile, $path . 'css/' .
$outFile . '.css');
return true;
}
catch (Exception $e)
{
$app->enqueueMessage($e->getMessage(), 'error');
}
}
}
/**
* Delete a particular file.
*
* @param string $file The relative location of the file.
*
* @return boolean True if file deletion is successful, false otherwise
*
* @since 3.2
*/
public function deleteFile($file)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/');
$filePath = $path . urldecode(base64_decode($file));
$return = JFile::delete($filePath);
if (!$return)
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_DELETE_FAIL'),
'error');
return false;
}
return true;
}
}
/**
* Create new file.
*
* @param string $name The name of file.
* @param string $type The extension of the file.
* @param string $location Location for the new file.
*
* @return boolean true if file created successfully, false otherwise
*
* @since 3.2
*/
public function createFile($name, $type, $location)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/');
if (file_exists(JPath::clean($path . '/' . $location .
'/' . $name . '.' . $type)))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'),
'error');
return false;
}
if (!fopen(JPath::clean($path . '/' . $location .
'/' . $name . '.' . $type), 'x'))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_CREATE_ERROR'),
'error');
return false;
}
// Check if the format is allowed and will be showed in the backend
$check = $this->checkFormat($type);
// Add a message if we are not allowed to show this file in the backend.
if (!$check)
{
$app->enqueueMessage(JText::sprintf('COM_TEMPLATES_WARNING_FORMAT_WILL_NOT_BE_VISIBLE',
$type), 'warning');
}
return true;
}
}
/**
* Upload new file.
*
* @param string $file The name of the file.
* @param string $location Location for the new file.
*
* @return boolean True if file uploaded successfully, false otherwise
*
* @since 3.2
*/
public function uploadFile($file, $location)
{
jimport('joomla.filesystem.folder');
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/');
$fileName = JFile::makeSafe($file['name']);
$err = null;
JLoader::register('TemplateHelper', JPATH_ADMINISTRATOR .
'/components/com_templates/helpers/template.php');
if (!TemplateHelper::canUpload($file, $err))
{
// Can't upload the file
return false;
}
if (file_exists(JPath::clean($path . '/' . $location .
'/' . $file['name'])))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'),
'error');
return false;
}
if (!JFile::upload($file['tmp_name'], JPath::clean($path .
'/' . $location . '/' . $fileName)))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_UPLOAD_ERROR'),
'error');
return false;
}
$url = JPath::clean($location . '/' . $fileName);
return $url;
}
}
/**
* Create new folder.
*
* @param string $name The name of the new folder.
* @param string $location Location for the new folder.
*
* @return boolean True if override folder is created successfully,
false otherwise
*
* @since 3.2
*/
public function createFolder($name, $location)
{
jimport('joomla.filesystem.folder');
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/');
if (file_exists(JPath::clean($path . '/' . $location .
'/' . $name . '/')))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_EXISTS'),
'error');
return false;
}
if (!JFolder::create(JPath::clean($path . '/' . $location .
'/' . $name)))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_CREATE_ERROR'),
'error');
return false;
}
return true;
}
}
/**
* Delete a folder.
*
* @param string $location The name and location of the folder.
*
* @return boolean True if override folder is deleted successfully,
false otherwise
*
* @since 3.2
*/
public function deleteFolder($location)
{
jimport('joomla.filesystem.folder');
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/' . $location);
if (!file_exists($path))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FOLDER_NOT_EXISTS'),
'error');
return false;
}
$return = JFolder::delete($path);
if (!$return)
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_DELETE_ERROR'),
'error');
return false;
}
return true;
}
}
/**
* Rename a file.
*
* @param string $file The name and location of the old file
* @param string $name The new name of the file.
*
* @return string Encoded string containing the new file location.
*
* @since 3.2
*/
public function renameFile($file, $name)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client =
JApplicationHelper::getClientInfo($template->client_id);
$path = JPath::clean($client->path . '/templates/'
. $template->element . '/');
$fileName = base64_decode($file);
$explodeArray = explode('.', $fileName);
$type = end($explodeArray);
$explodeArray = explode('/', $fileName);
$newName = str_replace(end($explodeArray), $name . '.' .
$type, $fileName);
if (file_exists($path . $newName))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'),
'error');
return false;
}
if (!rename($path . $fileName, $path . $newName))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_RENAME_ERROR'),
'error');
return false;
}
return base64_encode($newName);
}
}
/**
* Get an image address, height and width.
*
* @return array an associative array containing image address, height
and width.
*
* @since 3.2
*/
public function getImage()
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$fileName = base64_decode($app->input->get('file'));
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/');
if (stristr($client->path, 'administrator') == false)
{
$folder = '/templates/';
}
else
{
$folder = '/administrator/templates/';
}
$uri = JUri::root(true) . $folder . $template->element;
if (file_exists(JPath::clean($path . $fileName)))
{
$JImage = new JImage(JPath::clean($path . $fileName));
$image['address'] = $uri . $fileName;
$image['path'] = $fileName;
$image['height'] = $JImage->getHeight();
$image['width'] = $JImage->getWidth();
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_IMAGE_FILE_NOT_FOUND'),
'error');
return false;
}
return $image;
}
}
/**
* Crop an image.
*
* @param string $file The name and location of the file
* @param string $w width.
* @param string $h height.
* @param string $x x-coordinate.
* @param string $y y-coordinate.
*
* @return boolean true if image cropped successfully, false
otherwise.
*
* @since 3.2
*/
public function cropImage($file, $w, $h, $x, $y)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$relPath = base64_decode($file);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/' . $relPath);
try
{
$image = new \JImage($path);
$properties = $image->getImageFileProperties($path);
switch ($properties->mime)
{
case 'image/png':
$imageType = \IMAGETYPE_PNG;
break;
case 'image/gif':
$imageType = \IMAGETYPE_GIF;
break;
default:
$imageType = \IMAGETYPE_JPEG;
}
$image->crop($w, $h, $x, $y, false);
$image->toFile($path, $imageType);
return true;
}
catch (Exception $e)
{
$app->enqueueMessage($e->getMessage(), 'error');
}
}
}
/**
* Resize an image.
*
* @param string $file The name and location of the file
* @param string $width The new width of the image.
* @param string $height The new height of the image.
*
* @return boolean true if image resize successful, false otherwise.
*
* @since 3.2
*/
public function resizeImage($file, $width, $height)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$relPath = base64_decode($file);
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/' . $relPath);
try
{
$image = new \JImage($path);
$properties = $image->getImageFileProperties($path);
switch ($properties->mime)
{
case 'image/png':
$imageType = \IMAGETYPE_PNG;
break;
case 'image/gif':
$imageType = \IMAGETYPE_GIF;
break;
default:
$imageType = \IMAGETYPE_JPEG;
}
$image->resize($width, $height, false, \JImage::SCALE_FILL);
$image->toFile($path, $imageType);
return true;
}
catch (Exception $e)
{
$app->enqueueMessage($e->getMessage(), 'error');
}
}
}
/**
* Template preview.
*
* @return object object containing the id of the template.
*
* @since 3.2
*/
public function getPreview()
{
$app = JFactory::getApplication();
$db = $this->getDbo();
$query = $db->getQuery(true);
$query->select('id, client_id');
$query->from('#__template_styles');
$query->where($db->quoteName('template') . ' =
' . $db->quote($this->template->element));
$db->setQuery($query);
try
{
$result = $db->loadObject();
}
catch (RuntimeException $e)
{
$app->enqueueMessage($e->getMessage(), 'warning');
}
if (empty($result))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_EXTENSION_RECORD_NOT_FOUND'),
'warning');
}
else
{
return $result;
}
}
/**
* Rename a file.
*
* @return mixed array on success, false on failure
*
* @since 3.2
*/
public function getFont()
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client =
JApplicationHelper::getClientInfo($template->client_id);
$relPath = base64_decode($app->input->get('file'));
$explodeArray = explode('/', $relPath);
$fileName = end($explodeArray);
$path = JPath::clean($client->path . '/templates/'
. $template->element . '/' . $relPath);
if (stristr($client->path, 'administrator') == false)
{
$folder = '/templates/';
}
else
{
$folder = '/administrator/templates/';
}
$uri = JUri::root(true) . $folder . $template->element;
if (file_exists(JPath::clean($path)))
{
$font['address'] = $uri . $relPath;
$font['rel_path'] = $relPath;
$font['name'] = $fileName;
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FONT_FILE_NOT_FOUND'),
'error');
return false;
}
return $font;
}
}
/**
* Copy a file.
*
* @param string $newName The name of the copied file
* @param string $location The final location where the file is to be
copied
* @param string $file The name and location of the file
*
* @return boolean true if image resize successful, false otherwise.
*
* @since 3.2
*/
public function copyFile($newName, $location, $file)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client =
JApplicationHelper::getClientInfo($template->client_id);
$relPath = base64_decode($file);
$explodeArray = explode('.', $relPath);
$ext = end($explodeArray);
$path = JPath::clean($client->path . '/templates/'
. $template->element . '/');
$newPath = JPath::clean($path . '/' . $location .
'/' . $newName . '.' . $ext);
if (file_exists($newPath))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_EXISTS'),
'error');
return false;
}
if (JFile::copy($path . $relPath, $newPath))
{
$app->enqueueMessage(JText::sprintf('COM_TEMPLATES_FILE_COPY_SUCCESS',
$newName . '.' . $ext));
return true;
}
else
{
return false;
}
}
}
/**
* Get the compressed files.
*
* @return array if file exists, false otherwise
*
* @since 3.2
*/
public function getArchive()
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client = JApplicationHelper::getClientInfo($template->client_id);
$relPath = base64_decode($app->input->get('file'));
$path = JPath::clean($client->path . '/templates/' .
$template->element . '/' . $relPath);
if (file_exists(JPath::clean($path)))
{
$files = array();
$zip = new ZipArchive;
if ($zip->open($path) === true)
{
for ($i = 0; $i < $zip->numFiles; $i++)
{
$entry = $zip->getNameIndex($i);
$files[] = $entry;
}
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_OPEN_FAIL'),
'error');
return false;
}
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_ERROR_FONT_FILE_NOT_FOUND'),
'error');
return false;
}
return $files;
}
}
/**
* Extract contents of an archive file.
*
* @param string $file The name and location of the file
*
* @return boolean true if image extraction is successful, false
otherwise.
*
* @since 3.2
*/
public function extractArchive($file)
{
if ($template = $this->getTemplate())
{
$app = JFactory::getApplication();
$client =
JApplicationHelper::getClientInfo($template->client_id);
$relPath = base64_decode($file);
$explodeArray = explode('/', $relPath);
$fileName = end($explodeArray);
$folderPath = stristr($relPath, $fileName, true);
$path = JPath::clean($client->path . '/templates/'
. $template->element . '/' . $folderPath . '/');
if (file_exists(JPath::clean($path . '/' . $fileName)))
{
$zip = new ZipArchive;
if ($zip->open(JPath::clean($path . '/' . $fileName)) ===
true)
{
for ($i = 0; $i < $zip->numFiles; $i++)
{
$entry = $zip->getNameIndex($i);
if (file_exists(JPath::clean($path . '/' . $entry)))
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_EXISTS'),
'error');
return false;
}
}
$zip->extractTo($path);
return true;
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_OPEN_FAIL'),
'error');
return false;
}
}
else
{
$app->enqueueMessage(JText::_('COM_TEMPLATES_FILE_ARCHIVE_NOT_FOUND'),
'error');
return false;
}
}
}
/**
* Check if the extension is allowed and will be shown in the template
manager
*
* @param string $ext The extension to check if it is allowed
*
* @return boolean true if the extension is allowed false otherwise
*
* @since 3.6.0
*/
protected function checkFormat($ext)
{
if (!isset($this->allowedFormats))
{
$params = JComponentHelper::getParams('com_templates');
$imageTypes = explode(',',
$params->get('image_formats'));
$sourceTypes = explode(',',
$params->get('source_formats'));
$fontTypes = explode(',',
$params->get('font_formats'));
$archiveTypes = explode(',',
$params->get('compressed_formats'));
$this->allowedFormats = array_merge($imageTypes, $sourceTypes,
$fontTypes, $archiveTypes);
}
return in_array($ext, $this->allowedFormats);
}
}
PK��[������models/templates.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\String\StringHelper;
/**
* Methods supporting a list of template extension records.
*
* @since 1.6
*/
class TemplatesModelTemplates extends JModelList
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration
settings.
*
* @see JControllerLegacy
* @since 1.6
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'name', 'a.name',
'folder', 'a.folder',
'element', 'a.element',
'checked_out', 'a.checked_out',
'checked_out_time', 'a.checked_out_time',
'state', 'a.state',
'enabled', 'a.enabled',
'ordering', 'a.ordering',
);
}
parent::__construct($config);
}
/**
* Override parent getItems to add extra XML metadata.
*
* @return array
*
* @since 1.6
*/
public function getItems()
{
$items = parent::getItems();
foreach ($items as &$item)
{
$client = JApplicationHelper::getClientInfo($item->client_id);
$item->xmldata =
TemplatesHelper::parseXMLTemplateFile($client->path, $item->element);
}
return $items;
}
/**
* Build an SQL query to load the list data.
*
* @return JDatabaseQuery
*
* @since 1.6
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query->select(
$this->getState(
'list.select',
'a.extension_id, a.name, a.element, a.client_id'
)
);
$query->from($db->quoteName('#__extensions',
'a'))
->where($db->quoteName('a.client_id') . ' = '
. (int) $this->getState('client_id'))
->where($db->quoteName('a.enabled') . ' = 1')
->where($db->quoteName('a.type') . ' = ' .
$db->quote('template'));
// Filter by search in title.
if ($search = $this->getState('filter.search'))
{
if (stripos($search, 'id:') === 0)
{
$query->where($db->quoteName('a.id') . ' = '
. (int) substr($search, 3));
}
else
{
$search = $db->quote('%' .
StringHelper::strtolower($search) . '%');
$query->where('(' . ' LOWER(a.element) LIKE ' .
$search . ' OR LOWER(a.name) LIKE ' . $search . ')');
}
}
// Add the list ordering clause.
$query->order($db->escape($this->getState('list.ordering',
'a.element')) . ' ' .
$db->escape($this->getState('list.direction',
'ASC')));
return $query;
}
/**
* Method to get a store id based on model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id A prefix for the store id.
*
* @return string A store id.
*
* @since 1.6
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('client_id');
$id .= ':' . $this->getState('filter.search');
return parent::getStoreId($id);
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @since 1.6
*/
protected function populateState($ordering = 'a.element',
$direction = 'asc')
{
// Load the filter state.
$this->setState('filter.search',
$this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search', '',
'string'));
// Special case for the client id.
$clientId = (int) $this->getUserStateFromRequest($this->context .
'.client_id', 'client_id', 0, 'int');
$clientId = (!in_array($clientId, array (0, 1))) ? 0 : $clientId;
$this->setState('client_id', $clientId);
// Load the parameters.
$params = JComponentHelper::getParams('com_templates');
$this->setState('params', $params);
// List state information.
parent::populateState($ordering, $direction);
}
}
PK��[? Z��tables/style.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\Registry\Registry;
/**
* Template style table class.
*
* @since 1.6
*/
class TemplatesTableStyle extends JTable
{
/**
* Constructor
*
* @param JDatabaseDriver &$db A database connector object
*
* @since 1.6
*/
public function __construct(&$db)
{
parent::__construct('#__template_styles', 'id', $db);
}
/**
* Overloaded bind function to pre-process the params.
*
* @param array $array Named array
* @param mixed $ignore An optional array or space separated list of
properties to ignore while binding.
*
* @return null|string null if operation was satisfactory, otherwise
returns an error
*
* @since 1.6
*/
public function bind($array, $ignore = '')
{
if (isset($array['params']) &&
is_array($array['params']))
{
$registry = new Registry($array['params']);
$array['params'] = (string) $registry;
}
// Verify that the default style is not unset
if ($array['home'] == '0' && $this->home
== '1')
{
$this->setError(JText::_('COM_TEMPLATES_ERROR_CANNOT_UNSET_DEFAULT_STYLE'));
return false;
}
return parent::bind($array, $ignore);
}
/**
* Overloaded check method to ensure data integrity.
*
* @return boolean True on success.
*
* @since 1.6
*/
public function check()
{
if (empty($this->title))
{
$this->setError(JText::_('COM_TEMPLATES_ERROR_STYLE_REQUIRES_TITLE'));
return false;
}
return true;
}
/**
* Overloaded store method to ensure unicity of default style.
*
* @param boolean $updateNulls True to update fields even if they are
null.
*
* @return boolean True on success.
*
* @since 1.6
*/
public function store($updateNulls = false)
{
if ($this->home != '0')
{
$query = $this->_db->getQuery(true)
->update('#__template_styles')
->set('home=\'0\'')
->where('client_id=' . (int) $this->client_id)
->where('home=' .
$this->_db->quote($this->home));
$this->_db->setQuery($query);
$this->_db->execute();
}
return parent::store($updateNulls);
}
/**
* Overloaded store method to unsure existence of a default style for a
template.
*
* @param mixed $pk An optional primary key value to delete. If not
set the instance property value is used.
*
* @return boolean True on success.
*
* @since 1.6
*/
public function delete($pk = null)
{
$k = $this->_tbl_key;
$pk = is_null($pk) ? $this->$k : $pk;
if (!is_null($pk))
{
$query = $this->_db->getQuery(true)
->from('#__template_styles')
->select('id')
->where('client_id=' . (int) $this->client_id)
->where('template=' .
$this->_db->quote($this->template));
$this->_db->setQuery($query);
$results = $this->_db->loadColumn();
if (count($results) == 1 && $results[0] == $pk)
{
$this->setError(JText::_('COM_TEMPLATES_ERROR_CANNOT_DELETE_LAST_STYLE'));
return false;
}
}
return parent::delete($pk);
}
}
PK��[�Z%ܴ�
templates.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
JHtml::_('behavior.tabstate');
if (!JFactory::getUser()->authorise('core.manage',
'com_templates'))
{
throw new
JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'),
403);
}
JLoader::register('TemplatesHelper', __DIR__ .
'/helpers/templates.php');
$controller = JControllerLegacy::getInstance('Templates');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
PK��[���$$
templates.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<extension type="component" version="3.1"
method="upgrade">
<name>com_templates</name>
<author>Joomla! Project</author>
<creationDate>April 2006</creationDate>
<copyright>(C) 2005 - 2020 Open Source Matters. All rights
reserved.</copyright>
<license>GNU General Public License version 2 or later; see
LICENSE.txt</license>
<authorEmail>admin@joomla.org</authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<version>3.0.0</version>
<description>COM_TEMPLATES_XML_DESCRIPTION</description>
<administration>
<files folder="admin">
<filename>config.xml</filename>
<filename>controller.php</filename>
<filename>templates.php</filename>
<folder>controllers</folder>
<folder>helpers</folder>
<folder>models</folder>
<folder>tables</folder>
<folder>views</folder>
</files>
<languages folder="admin">
<language
tag="en-GB">language/en-GB.com_templates.ini</language>
<language
tag="en-GB">language/en-GB.com_templates.sys.ini</language>
</languages>
</administration>
</extension>
PK��[}i2{�
�
views/style/tmpl/edit.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('behavior.formvalidator');
JHtml::_('behavior.keepalive');
JHtml::_('formbehavior.chosen', 'select');
$user = JFactory::getUser();
JFactory::getDocument()->addScriptDeclaration("
Joomla.submitbutton = function(task)
{
if (task == 'style.cancel' ||
document.formvalidator.isValid(document.getElementById('style-form')))
{
Joomla.submitform(task,
document.getElementById('style-form'));
}
};
");
?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&layout=edit&id='
. (int) $this->item->id); ?>" method="post"
name="adminForm" id="style-form"
class="form-validate">
<?php echo JLayoutHelper::render('joomla.edit.title_alias',
$this); ?>
<div class="form-horizontal">
<?php echo JHtml::_('bootstrap.startTabSet',
'myTab', array('active' => 'details'));
?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'details', JText::_('JDETAILS')); ?>
<div class="row-fluid">
<div class="span9">
<h2>
<?php echo JText::_($this->item->template); ?>
</h2>
<div class="info-labels">
<span class="label hasTooltip" title="<?php echo
JHtml::_('tooltipText',
'COM_TEMPLATES_FIELD_CLIENT_LABEL'); ?>">
<?php echo $this->item->client_id == 0 ?
JText::_('JSITE') : JText::_('JADMINISTRATOR'); ?>
</span>
</div>
<div>
<p><?php echo
JText::_($this->item->xml->description); ?></p>
<?php
$this->fieldset = 'description';
$description = JLayoutHelper::render('joomla.edit.fieldset',
$this);
?>
<?php if ($description) : ?>
<p class="readmore">
<a href="#" onclick="jQuery('.nav-tabs
a[href=\'#description\']').tab('show');">
<?php echo JText::_('JGLOBAL_SHOW_FULL_DESCRIPTION');
?>
</a>
</p>
<?php endif; ?>
</div>
<?php
$this->fieldset = 'basic';
$html = JLayoutHelper::render('joomla.edit.fieldset', $this);
echo $html ? '<hr />' . $html : '';
?>
</div>
<div class="span3">
<?php
// Set main fields.
$this->fields = array(
'home',
'client_id',
'template'
);
?>
<?php echo JLayoutHelper::render('joomla.edit.global',
$this); ?>
</div>
</div>
<?php echo JHtml::_('bootstrap.endTab'); ?>
<?php if ($description) : ?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'description',
JText::_('JGLOBAL_FIELDSET_DESCRIPTION')); ?>
<?php echo $description; ?>
<?php echo JHtml::_('bootstrap.endTab'); ?>
<?php endif; ?>
<?php
$this->fieldsets = array();
$this->ignore_fieldsets = array('basic',
'description');
echo JLayoutHelper::render('joomla.edit.params', $this);
?>
<?php if ($user->authorise('core.edit',
'com_menus') && $this->item->client_id == 0
&& $this->canDo->get('core.edit.state')) : ?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'assignment',
JText::_('COM_TEMPLATES_MENUS_ASSIGNMENT')); ?>
<?php echo $this->loadTemplate('assignment'); ?>
<?php echo JHtml::_('bootstrap.endTab'); ?>
<?php endif; ?>
<?php echo JHtml::_('bootstrap.endTabSet'); ?>
<input type="hidden" name="task"
value="" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
PK��[�6ҡ�$views/style/tmpl/edit_assignment.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// Initialise related data.
JLoader::register('MenusHelper', JPATH_ADMINISTRATOR .
'/components/com_menus/helpers/menus.php');
$menuTypes = MenusHelper::getMenuLinks();
$user = JFactory::getUser();
?>
<label id="jform_menuselect-lbl"
for="jform_menuselect"><?php echo
JText::_('JGLOBAL_MENU_SELECTION'); ?></label>
<div class="btn-toolbar">
<button class="btn jform-rightbtn" type="button"
onclick="jQuery('.chk-menulink').attr('checked',
!jQuery('.chk-menulink').attr('checked'));">
<span class="icon-checkbox-partial"
aria-hidden="true"></span> <?php echo
JText::_('JGLOBAL_SELECTION_INVERT_ALL'); ?>
</button>
</div>
<div id="menu-assignment">
<ul class="menu-links">
<?php foreach ($menuTypes as &$type) : ?>
<li>
<div class="menu-links-block">
<button class="btn jform-rightbtn"
type="button" onclick="jQuery('.menutype-<?php echo
$type->menutype; ?>').attr('checked',
!jQuery('.menutype-<?php echo $type->menutype;
?>').attr('checked'));">
<span class="icon-checkbox-partial"
aria-hidden="true"></span> <?php echo
JText::_('JGLOBAL_SELECTION_INVERT'); ?>
</button>
<h5><?php echo $type->title ?: $type->menutype;
?></h5>
<?php foreach ($type->links as $link) : ?>
<label class="checkbox small" for="link<?php
echo (int) $link->value; ?>" >
<input type="checkbox"
name="jform[assigned][]" value="<?php echo (int)
$link->value; ?>" id="link<?php echo (int)
$link->value; ?>"<?php if ($link->template_style_id ==
$this->item->id) : ?> checked="checked"<?php endif;
?><?php if ($link->checked_out && $link->checked_out !=
$user->id) : ?> disabled="disabled"<?php else : ?>
class="chk-menulink menutype-<?php echo $type->menutype;
?>"<?php endif; ?> />
<?php echo
JLayoutHelper::render('joomla.html.treeprefix',
array('level' => $link->level)) . $link->text; ?>
</label>
<?php endforeach; ?>
</div>
</li>
<?php endforeach; ?>
</ul>
</div>
PK��[�_�//!views/style/tmpl/edit_options.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// Load chosen.css
JHtml::_('formbehavior.chosen', 'select');
?>
<?php
echo JHtml::_('bootstrap.startAccordion',
'templatestyleOptions', array('active' =>
'collapse0'));
$fieldSets = $this->form->getFieldsets('params');
$i = 0;
foreach ($fieldSets as $name => $fieldSet) :
$label = !empty($fieldSet->label) ? $fieldSet->label :
'COM_TEMPLATES_' . $name . '_FIELDSET_LABEL';
echo JHtml::_('bootstrap.addSlide',
'templatestyleOptions', JText::_($label), 'collapse' .
($i++));
if (isset($fieldSet->description) &&
trim($fieldSet->description)) :
echo '<p class="tip">' .
$this->escape(JText::_($fieldSet->description)) .
'</p>';
endif;
?>
<?php foreach ($this->form->getFieldset($name) as $field) :
?>
<div class="control-group">
<div class="control-label">
<?php echo $field->label; ?>
</div>
<div class="controls">
<?php echo $field->input; ?>
</div>
</div>
<?php endforeach;
echo JHtml::_('bootstrap.endSlide');
endforeach;
echo JHtml::_('bootstrap.endAccordion');
PK��[��c�� � views/style/view.html.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* View to edit a template style.
*
* @since 1.6
*/
class TemplatesViewStyle extends JViewLegacy
{
/**
* The JObject (on success, false on failure)
*
* @var JObject
*/
protected $item;
/**
* The form object
*
* @var JForm
*/
protected $form;
/**
* The model state
*
* @var JObject
*/
protected $state;
/**
* Execute and display a template script.
*
* @param string $tpl The name of the template file to parse;
automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @since 1.6
*/
public function display($tpl = null)
{
$this->item = $this->get('Item');
$this->state = $this->get('State');
$this->form = $this->get('Form');
$this->canDo = JHelperContent::getActions('com_templates');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new Exception(implode("\n", $errors), 500);
}
$this->addToolbar();
return parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*
* @since 1.6
*/
protected function addToolbar()
{
JFactory::getApplication()->input->set('hidemainmenu',
true);
$isNew = ($this->item->id == 0);
$canDo = $this->canDo;
JToolbarHelper::title(
$isNew ? JText::_('COM_TEMPLATES_MANAGER_ADD_STYLE')
: JText::_('COM_TEMPLATES_MANAGER_EDIT_STYLE'), 'eye
thememanager'
);
// If not checked out, can save the item.
if ($canDo->get('core.edit'))
{
JToolbarHelper::apply('style.apply');
JToolbarHelper::save('style.save');
}
// If an existing item, can save to a copy.
if (!$isNew && $canDo->get('core.create'))
{
JToolbarHelper::save2copy('style.save2copy');
}
if (empty($this->item->id))
{
JToolbarHelper::cancel('style.cancel');
}
else
{
JToolbarHelper::cancel('style.cancel',
'JTOOLBAR_CLOSE');
}
JToolbarHelper::divider();
// Get the help information for the template item.
$lang = JFactory::getLanguage();
$help = $this->get('Help');
if ($lang->hasKey($help->url))
{
$debug = $lang->setDebug(false);
$url = JText::_($help->url);
$lang->setDebug($debug);
}
else
{
$url = null;
}
JToolbarHelper::help($help->key, false, $url);
}
}
PK��[��_�views/style/view.json.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* View to edit a template style.
*
* @since 1.6
*/
class TemplatesViewStyle extends JViewLegacy
{
/**
* The JObject (on success, false on failure)
*
* @var JObject
*/
protected $item;
/**
* The form object
*
* @var JForm
*/
protected $form;
/**
* The model state
*
* @var JObject
*/
protected $state;
/**
* Execute and display a template script.
*
* @param string $tpl The name of the template file to parse;
automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @since 1.6
*/
public function display($tpl = null)
{
try
{
$this->item = $this->get('Item');
}
catch (Exception $e)
{
$app = JFactory::getApplication();
$app->enqueueMessage($e->getMessage(), 'error');
return false;
}
$paramsList = $this->item->getProperties();
unset($paramsList['xml']);
$paramsList = json_encode($paramsList);
return $paramsList;
}
}
PK��[m����views/styles/tmpl/default.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');
$user = JFactory::getUser();
$clientId = (int) $this->state->get('client_id', 0);
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirn =
$this->escape($this->state->get('list.direction'));
$colSpan = $clientId === 1 ? 5 : 6;
?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=styles');
?>" method="post" name="adminForm"
id="adminForm">
<?php if (!empty($this->sidebar)) : ?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar; ?>
</div>
<div id="j-main-container" class="span10">
<?php else : ?>
<div id="j-main-container">
<?php endif; ?>
<?php echo
JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this, 'options' =>
array('selectorFieldName' => 'client_id'))); ?>
<?php if ($this->total > 0) : ?>
<table class="table table-striped"
id="styleList">
<thead>
<tr>
<th width="1%" class="nowrap center">
 
</th>
<th class="nowrap">
<?php echo JHtml::_('searchtools.sort',
'COM_TEMPLATES_HEADING_STYLE', 'a.title', $listDirn,
$listOrder); ?>
</th>
<th width="1%" class="nowrap center">
<?php echo JHtml::_('searchtools.sort',
'COM_TEMPLATES_HEADING_DEFAULT', 'a.home', $listDirn,
$listOrder); ?>
</th>
<?php if ($clientId === 0) : ?>
<th width="20%" class="nowrap
hidden-phone">
<?php echo JText::_('COM_TEMPLATES_HEADING_PAGES');
?>
</th>
<?php endif; ?>
<th width="30%" class="hidden-phone
hidden-tablet">
<?php echo JHtml::_('searchtools.sort',
'COM_TEMPLATES_HEADING_TEMPLATE', 'a.template',
$listDirn, $listOrder); ?>
</th>
<th width="1%" class="nowrap hidden-phone
hidden-tablet">
<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder);
?>
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="<?php echo $colSpan; ?>">
<?php echo $this->pagination->getListFooter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php foreach ($this->items as $i => $item) :
$canCreate = $user->authorise('core.create',
'com_templates');
$canEdit = $user->authorise('core.edit',
'com_templates');
$canChange = $user->authorise('core.edit.state',
'com_templates');
?>
<tr class="row<?php echo $i % 2; ?>">
<td width="1%" class="center">
<?php echo JHtml::_('grid.id', $i, $item->id); ?>
</td>
<td>
<?php if ($this->preview && $item->client_id ==
'0') : ?>
<a target="_blank" href="<?php echo
JUri::root() . 'index.php?tp=1&templateStyle=' . (int)
$item->id ?>" class="jgrid">
<span class="icon-eye-open hasTooltip"
aria-hidden="true" title="<?php echo
JHtml::_('tooltipText',
JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'), $item->title, 0);
?>"></span>
<span class="element-invisible"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW'); ?></span>
</a>
<?php elseif ($item->client_id == '1') : ?>
<span class="icon-eye-close disabled hasTooltip"
aria-hidden="true" title="<?php echo
JHtml::_('tooltipText',
'COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN');
?>"></span>
<span class="element-invisible"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN');
?></span>
<?php else: ?>
<span class="icon-eye-close disabled hasTooltip"
aria-hidden="true" title="<?php echo
JHtml::_('tooltipText',
'COM_TEMPLATES_TEMPLATE_NO_PREVIEW');
?>"></span>
<span class="element-invisible"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?></span>
<?php endif; ?>
<?php if ($canEdit) : ?>
<a href="<?php echo
JRoute::_('index.php?option=com_templates&task=style.edit&id='
. (int) $item->id); ?>">
<?php echo $this->escape($item->title); ?></a>
<?php else : ?>
<?php echo $this->escape($item->title); ?>
<?php endif; ?>
</td>
<td class="center">
<?php if ($item->home == '0' || $item->home ==
'1') : ?>
<?php echo JHtml::_('jgrid.isdefault', $item->home
!= '0', $i, 'styles.', $canChange &&
$item->home != '1'); ?>
<?php elseif ($canChange) : ?>
<a href="<?php echo
JRoute::_('index.php?option=com_templates&task=styles.unsetDefault&cid[]='
. $item->id . '&' . JSession::getFormToken() .
'=1'); ?>">
<?php if ($item->image) : ?>
<?php echo JHtml::_('image',
'mod_languages/' . $item->image . '.gif',
$item->language_title, array('title' =>
JText::sprintf('COM_TEMPLATES_GRID_UNSET_LANGUAGE',
$item->language_title)), true); ?>
<?php else : ?>
<span class="label" title="<?php echo
JText::sprintf('COM_TEMPLATES_GRID_UNSET_LANGUAGE',
$item->language_title); ?>"><?php echo
$item->language_sef; ?></span>
<?php endif; ?>
</a>
<?php else : ?>
<?php if ($item->image) : ?>
<?php echo JHtml::_('image',
'mod_languages/' . $item->image . '.gif',
$item->language_title, array('title' =>
$item->language_title), true); ?>
<?php else : ?>
<span class="label" title="<?php echo
$item->language_title; ?>"><?php echo
$item->language_sef; ?></span>
<?php endif; ?>
<?php endif; ?>
</td>
<?php if ($clientId === 0) : ?>
<td class="small hidden-phone">
<?php if ($item->home == '1') : ?>
<?php echo JText::_('COM_TEMPLATES_STYLES_PAGES_ALL');
?>
<?php elseif ($item->home != '0' &&
$item->home != '1') : ?>
<?php echo
JText::sprintf('COM_TEMPLATES_STYLES_PAGES_ALL_LANGUAGE',
$this->escape($item->language_title)); ?>
<?php elseif ($item->assigned > 0) : ?>
<?php echo
JText::sprintf('COM_TEMPLATES_STYLES_PAGES_SELECTED',
$this->escape($item->assigned)); ?>
<?php else : ?>
<?php echo
JText::_('COM_TEMPLATES_STYLES_PAGES_NONE'); ?>
<?php endif; ?>
</td>
<?php endif; ?>
<td class="hidden-phone hidden-tablet">
<label for="cb<?php echo $i; ?>"
class="small">
<a href="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. (int) $item->e_id); ?> ">
<?php echo ucfirst($this->escape($item->template)); ?>
</a>
</label>
</td>
<td class="hidden-phone hidden-tablet">
<?php echo (int) $item->id; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<input type="hidden" name="task"
value="" />
<input type="hidden" name="boxchecked"
value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
PK��[C��^��views/styles/tmpl/default.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_TEMPLATES_STYLE_VIEW_DEFAULT_TITLE">
<message>
<![CDATA[COM_TEMPLATES_STYLE_VIEW_DEFAULT_DESC]]>
</message>
</layout>
</metadata>
PK��[\�n��
�
views/styles/view.html.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* View class for a list of template styles.
*
* @since 1.6
*/
class TemplatesViewStyles extends JViewLegacy
{
protected $items;
protected $pagination;
protected $state;
/**
* Execute and display a template script.
*
* @param string $tpl The name of the template file to parse;
automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise an Error object.
*/
public function display($tpl = null)
{
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->total = $this->get('Total');
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
$this->preview =
JComponentHelper::getParams('com_templates')->get('template_positions_display');
TemplatesHelper::addSubmenu('styles');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new Exception(implode("\n", $errors), 500);
}
$this->addToolbar();
$this->sidebar = JHtmlSidebar::render();
return parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*
* @since 1.6
*/
protected function addToolbar()
{
$canDo = JHelperContent::getActions('com_templates');
// Set the title.
if ((int) $this->get('State')->get('client_id')
=== 1)
{
JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_STYLES_ADMIN'),
'eye thememanager');
}
else
{
JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_STYLES_SITE'),
'eye thememanager');
}
if ($canDo->get('core.edit.state'))
{
JToolbarHelper::makeDefault('styles.setDefault',
'COM_TEMPLATES_TOOLBAR_SET_HOME');
JToolbarHelper::divider();
}
if ($canDo->get('core.edit'))
{
JToolbarHelper::editList('style.edit');
}
if ($canDo->get('core.create'))
{
JToolbarHelper::custom('styles.duplicate',
'copy.png', 'copy_f2.png',
'JTOOLBAR_DUPLICATE', true);
JToolbarHelper::divider();
}
if ($canDo->get('core.delete'))
{
JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE',
'styles.delete', 'JTOOLBAR_DELETE');
JToolbarHelper::divider();
}
if ($canDo->get('core.admin') ||
$canDo->get('core.options'))
{
JToolbarHelper::preferences('com_templates');
JToolbarHelper::divider();
}
JToolbarHelper::help('JHELP_EXTENSIONS_TEMPLATE_MANAGER_STYLES');
JHtmlSidebar::setAction('index.php?option=com_templates&view=styles');
}
}
PK��[wx&v�H�Hviews/template/tmpl/default.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('formbehavior.chosen', 'select');
JHtml::_('behavior.formvalidator');
JHtml::_('behavior.keepalive');
JHtml::_('behavior.tabstate');
$input = JFactory::getApplication()->input;
// No access if not global SuperUser
if (!JFactory::getUser()->authorise('core.admin'))
{
JFactory::getApplication()->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'),
'error');
}
if ($this->type == 'image')
{
JHtml::_('script', 'system/jquery.Jcrop.min.js',
array('version' => 'auto', 'relative'
=> true));
JHtml::_('stylesheet', 'system/jquery.Jcrop.min.css',
array('version' => 'auto', 'relative'
=> true));
}
JFactory::getDocument()->addScriptDeclaration("
jQuery(document).ready(function($){
// Hide all the folder when the page loads
$('.folder ul, .component-folder ul, .plugin-folder ul,
.layout-folder ul').hide();
// Display the tree after loading
$('.directory-tree').removeClass('directory-tree');
// Show all the lists in the path of an open file
$('.show > ul').show();
// Stop the default action of anchor tag on a click event
$('.folder-url, .component-folder-url, .plugin-folder-url,
.layout-folder-url').click(function(event){
event.preventDefault();
});
// Prevent the click event from proliferating
$('.file, .component-file-url,
.plugin-file-url').bind('click',function(e){
e.stopPropagation();
});
// Toggle the child indented list on a click event
$('.folder, .component-folder, .plugin-folder,
.layout-folder').bind('click',function(e){
$(this).children('ul').toggle();
e.stopPropagation();
});
// New file tree
$('#fileModal .folder-url').bind('click',function(e){
$('.folder-url').removeClass('selected');
e.stopPropagation();
$('#fileModal
input.address').val($(this).attr('data-id'));
$(this).addClass('selected');
});
// Folder manager tree
$('#folderModal
.folder-url').bind('click',function(e){
$('.folder-url').removeClass('selected');
e.stopPropagation();
$('#folderModal
input.address').val($(this).attr('data-id'));
$(this).addClass('selected');
});
var containerDiv = document.querySelector('.span3.tree-holder'),
treeContainer = containerDiv.querySelector('.nav.nav-list'),
liEls = treeContainer.querySelectorAll('.folder.show'),
filePathEl = document.querySelector('p.lead.hidden.path');
if(filePathEl)
var filePathTmp =
document.querySelector('p.lead.hidden.path').innerText;
if(filePathTmp && filePathTmp.charAt( 0 ) === '/' ) {
filePathTmp = filePathTmp.slice( 1 );
filePathTmp = filePathTmp.split('/');
filePathTmp = filePathTmp[filePathTmp.length - 1];
for (var i = 0, l = liEls.length; i < l; i++) {
liEls[i].querySelector('a').classList.add('active');
if (i === liEls.length - 1) {
var parentUl = liEls[i].querySelector('ul'),
allLi = parentUl.querySelectorAll('li');
for (var i = 0, l = allLi.length; i < l; i++) {
aEl = allLi[i].querySelector('a'),
spanEl = aEl.querySelector('span');
if (spanEl && filePathTmp === $.trim(spanEl.innerText)) {
aEl.classList.add('active');
}
}
}
}
}
});");
if ($this->type == 'image')
{
JFactory::getDocument()->addScriptDeclaration("
jQuery(document).ready(function($) {
var jcrop_api;
// Configuration for image cropping
$('#image-crop').Jcrop({
onChange: showCoords,
onSelect: showCoords,
onRelease: clearCoords,
trueSize: [" . $this->image['width'] .
',' . $this->image['height'] . "]
},function(){
jcrop_api = this;
});
// Function for calculating the crop coordinates
function showCoords(c)
{
$('#x').val(c.x);
$('#y').val(c.y);
$('#w').val(c.w);
$('#h').val(c.h);
};
// Function for clearing the coordinates
function clearCoords()
{
$('#adminForm input').val('');
};
});");
}
JFactory::getDocument()->addStyleDeclaration('
/* Styles for modals */
.selected{
background: #08c;
color: #fff;
}
.selected:hover{
background: #08c !important;
color: #fff;
}
.modal-body .column-left {
float: left; max-height: 70vh; overflow-y: auto;
}
.modal-body .column-right {
float: right;
}
@media (max-width: 767px) {
.modal-body .column-right {
float: left;
}
}
#deleteFolder{
margin: 0;
}
#image-crop{
max-width: 100% !important;
width: auto;
height: auto;
}
.directory-tree{
display: none;
}
.tree-holder{
overflow-x: auto;
}
');
if ($this->type == 'font')
{
JFactory::getDocument()->addStyleDeclaration(
"/* Styles for font preview */
@font-face
{
font-family: previewFont;
src: url('" . $this->font['address'] .
"')
}
.font-preview{
font-family: previewFont !important;
}"
);
}
?>
<?php echo JHtml::_('bootstrap.startTabSet',
'myTab', array('active' => 'editor'));
?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'editor', JText::_('COM_TEMPLATES_TAB_EDITOR')); ?>
<div class="row-fluid">
<div class="span12">
<?php if ($this->type == 'file') : ?>
<p class="lead"><?php echo
JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME',
$this->source->filename, $this->template->element);
?></p>
<p class="lead path hidden"><?php echo
$this->source->filename; ?></p>
<?php endif; ?>
<?php if ($this->type == 'image') : ?>
<p class="lead"><?php echo
JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME',
$this->image['path'], $this->template->element);
?></p>
<p class="lead path hidden"><?php echo
$this->image['path']; ?></p>
<?php endif; ?>
<?php if ($this->type == 'font') : ?>
<p class="lead"><?php echo
JText::sprintf('COM_TEMPLATES_TEMPLATE_FILENAME',
$this->font['rel_path'], $this->template->element);
?></p>
<p class="lead path hidden"><?php echo
$this->font['rel_path']; ?></p>
<?php endif; ?>
</div>
</div>
<div class="row-fluid">
<div class="span3 tree-holder">
<?php echo $this->loadTemplate('tree'); ?>
</div>
<div class="span9">
<?php if ($this->type == 'home') : ?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post"
name="adminForm" id="adminForm"
class="form-horizontal">
<input type="hidden" name="task"
value="" />
<?php echo JHtml::_('form.token'); ?>
<div class="hero-unit" style="text-align:
justify;">
<h2><?php echo
JText::_('COM_TEMPLATES_HOME_HEADING'); ?></h2>
<p><?php echo JText::_('COM_TEMPLATES_HOME_TEXT');
?></p>
<p>
<a
href="https://docs.joomla.org/Special:MyLanguage/J3.x:How_to_use_the_Template_Manager"
target="_blank" class="btn btn-primary btn-large">
<?php echo JText::_('COM_TEMPLATES_HOME_BUTTON'); ?>
</a>
</p>
</div>
</form>
<?php endif; ?>
<?php if ($this->type == 'file') : ?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post"
name="adminForm" id="adminForm"
class="form-horizontal">
<div class="editor-border">
<?php echo $this->form->getInput('source'); ?>
</div>
<input type="hidden" name="task"
value="" />
<?php echo JHtml::_('form.token'); ?>
<?php echo $this->form->getInput('extension_id');
?>
<?php echo $this->form->getInput('filename'); ?>
</form>
<?php endif; ?>
<?php if ($this->type == 'archive') : ?>
<legend><?php echo
JText::_('COM_TEMPLATES_FILE_CONTENT_PREVIEW');
?></legend>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post"
name="adminForm" id="adminForm"
class="form-horizontal">
<ul class="nav nav-stacked nav-list well">
<?php foreach ($this->archive as $file) : ?>
<li>
<?php if (substr($file, -1) === DIRECTORY_SEPARATOR) : ?>
<span class="icon-folder"
aria-hidden="true"></span> <?php echo $file;
?>
<?php endif; ?>
<?php if (substr($file, -1) != DIRECTORY_SEPARATOR) : ?>
<span class="icon-file"
aria-hidden="true"></span> <?php echo $file;
?>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<input type="hidden" name="task"
value="" />
<?php echo JHtml::_('form.token'); ?>
</form>
<?php endif; ?>
<?php if ($this->type == 'image') : ?>
<img id="image-crop" src="<?php echo
$this->image['address'] . '?' . time(); ?>"
/>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post"
name="adminForm" id="adminForm"
class="form-horizontal">
<fieldset class="adminform">
<input type ="hidden" id="x" name="x"
/>
<input type ="hidden" id="y" name="y"
/>
<input type ="hidden" id="h" name="h"
/>
<input type ="hidden" id="w" name="w"
/>
<input type="hidden" name="task"
value="" />
<?php echo JHtml::_('form.token'); ?>
</fieldset>
</form>
<?php endif; ?>
<?php if ($this->type == 'font') : ?>
<div class="font-preview">
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post"
name="adminForm" id="adminForm"
class="form-horizontal">
<fieldset class="adminform">
<p class="lead">H1</p><h1>Quickly gaze at
Joomla! views from HTML, CSS, JavaScript and XML </h1>
<p class="lead">H2</p><h2>Quickly gaze at
Joomla! views from HTML, CSS, JavaScript and XML </h2>
<p class="lead">H3</p><h3>Quickly gaze at
Joomla! views from HTML, CSS, JavaScript and XML </h3>
<p class="lead">H4</p><h4>Quickly gaze at
Joomla! views from HTML, CSS, JavaScript and XML </h4>
<p class="lead">H5</p><h5>Quickly gaze at
Joomla! views from HTML, CSS, JavaScript and XML </h5>
<p class="lead">H6</p> <h6>Quickly gaze
at Joomla! views from HTML, CSS, JavaScript and XML </h6>
<p class="lead">Bold</p><b>Quickly gaze
at Joomla! views from HTML, CSS, JavaScript and XML </b>
<p class="lead">Italics</p><i>Quickly
gaze at Joomla! views from HTML, CSS, JavaScript and XML </i>
<p class="lead">Unordered List</p>
<ul>
<li>Item</li>
<li>Item</li>
<li>Item<br />
<ul>
<li>Item</li>
<li>Item</li>
<li>Item<br />
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="lead">Ordered List</p>
<ol>
<li>Item</li>
<li>Item</li>
<li>Item<br />
<ul>
<li>Item</li>
<li>Item</li>
<li>Item<br />
<ul>
<li>Item</li>
<li>Item</li>
<li>Item</li>
</ul>
</li>
</ul>
</li>
</ol>
<input type="hidden" name="task"
value="" />
<?php echo JHtml::_('form.token'); ?>
</fieldset>
</form>
</div>
<?php endif; ?>
</div>
</div>
<?php echo JHtml::_('bootstrap.endTab'); ?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'overrides', JText::_('COM_TEMPLATES_TAB_OVERRIDES'));
?>
<div class="row-fluid">
<div class="span3">
<legend><?php echo
JText::_('COM_TEMPLATES_OVERRIDES_MODULES'); ?></legend>
<ul class="nav nav-list">
<?php $token = JSession::getFormToken() . '=' . 1; ?>
<?php foreach ($this->overridesList['modules'] as
$module) : ?>
<li>
<?php
$overrideLinkUrl =
'index.php?option=com_templates&view=template&task=template.overrides&folder='
. $module->path
. '&id=' . $input->getInt('id') .
'&file=' . $this->file . '&' . $token;
?>
<a href="<?php echo JRoute::_($overrideLinkUrl);
?>">
<span class="icon-copy"
aria-hidden="true"></span> <?php echo
$module->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</div>
<div class="span3">
<legend><?php echo
JText::_('COM_TEMPLATES_OVERRIDES_COMPONENTS');
?></legend>
<ul class="nav nav-list">
<?php $token = JSession::getFormToken() . '=' . 1; ?>
<?php foreach ($this->overridesList['components'] as
$key => $value) : ?>
<li class="component-folder">
<a href="#" class="component-folder-url">
<span class="icon-folder"
aria-hidden="true"></span> <?php echo $key;
?>
</a>
<ul class="nav nav-list">
<?php foreach ($value as $view) : ?>
<li>
<?php
$overrideLinkUrl =
'index.php?option=com_templates&view=template&task=template.overrides&folder='
. $view->path
. '&id=' . $input->getInt('id') .
'&file=' . $this->file . '&' . $token;
?>
<a class="component-file-url" href="<?php echo
JRoute::_($overrideLinkUrl); ?>">
<span class="icon-copy"
aria-hidden="true"></span> <?php echo
$view->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>
</div>
<div class="span3">
<legend><?php echo
JText::_('COM_TEMPLATES_OVERRIDES_PLUGINS'); ?></legend>
<ul class="nav nav-list">
<?php $token = JSession::getFormToken() . '=' . 1; ?>
<?php foreach ($this->overridesList['plugins'] as $key
=> $group) : ?>
<li class="plugin-folder">
<a href="#" class="plugin-folder-url">
<span class="icon-folder"
aria-hidden="true"></span> <?php echo $key;
?>
</a>
<ul class="nav nav-list">
<?php foreach ($group as $plugin) : ?>
<li>
<?php
$overrideLinkUrl =
'index.php?option=com_templates&view=template&task=template.overrides&folder='
. $plugin->path
. '&id=' . $input->getInt('id') .
'&file=' . $this->file . '&' . $token;
?>
<a class="plugin-file-url" href="<?php echo
JRoute::_($overrideLinkUrl); ?>">
<span class="icon-copy"
aria-hidden="true"></span> <?php echo
$plugin->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>
</div>
<div class="span3">
<legend><?php echo
JText::_('COM_TEMPLATES_OVERRIDES_LAYOUTS'); ?></legend>
<ul class="nav nav-list">
<?php $token = JSession::getFormToken() . '=' . 1; ?>
<?php foreach ($this->overridesList['layouts'] as $key
=> $value) : ?>
<li class="layout-folder">
<a href="#" class="layout-folder-url">
<span class="icon-folder"
aria-hidden="true"></span> <?php echo $key;
?>
</a>
<ul class="nav nav-list">
<?php foreach ($value as $layout) : ?>
<li>
<?php
$overrideLinkUrl =
'index.php?option=com_templates&view=template&task=template.overrides&folder='
. $layout->path
. '&id=' . $input->getInt('id') .
'&file=' . $this->file . '&' . $token;
?>
<a href="<?php echo JRoute::_($overrideLinkUrl);
?>">
<span class="icon-copy"
aria-hidden="true"></span> <?php echo
$layout->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
<?php echo JHtml::_('bootstrap.endTab'); ?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'description',
JText::_('COM_TEMPLATES_TAB_DESCRIPTION')); ?>
<?php echo $this->loadTemplate('description'); ?>
<?php echo JHtml::_('bootstrap.endTab'); ?>
<?php echo JHtml::_('bootstrap.endTabSet'); ?>
<?php // Collapse Modal
$copyModalData = array(
'selector' => 'copyModal',
'params' => array(
'title' =>
JText::_('COM_TEMPLATES_TEMPLATE_COPY'),
'footer' =>
$this->loadTemplate('modal_copy_footer'),
),
'body' =>
$this->loadTemplate('modal_copy_body'),
);
?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.copy&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post"
name="adminForm" id="adminForm">
<?php echo JLayoutHelper::render('joomla.modal.main',
$copyModalData); ?>
<?php echo JHtml::_('form.token'); ?>
</form>
<?php if ($this->type != 'home') : ?>
<?php // Rename Modal
$renameModalData = array(
'selector' => 'renameModal',
'params' => array(
'title' =>
JText::sprintf('COM_TEMPLATES_RENAME_FILE', $this->fileName),
'footer' =>
$this->loadTemplate('modal_rename_footer'),
),
'body' =>
$this->loadTemplate('modal_rename_body'),
);
?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.renameFile&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post">
<?php echo JLayoutHelper::render('joomla.modal.main',
$renameModalData); ?>
<?php echo JHtml::_('form.token'); ?>
</form>
<?php endif; ?>
<?php if ($this->type != 'home') : ?>
<?php // Delete Modal
$deleteModalData = array(
'selector' => 'deleteModal',
'params' => array(
'title' =>
JText::_('COM_TEMPLATES_ARE_YOU_SURE'),
'footer' =>
$this->loadTemplate('modal_delete_footer'),
),
'body' =>
$this->loadTemplate('modal_delete_body'),
);
?>
<?php echo JLayoutHelper::render('joomla.modal.main',
$deleteModalData); ?>
<?php endif; ?>
<?php // File Modal
$fileModalData = array(
'selector' => 'fileModal',
'params' => array(
'title' =>
JText::_('COM_TEMPLATES_NEW_FILE_HEADER'),
'footer' =>
$this->loadTemplate('modal_file_footer'),
),
'body' =>
$this->loadTemplate('modal_file_body'),
);
?>
<?php echo JLayoutHelper::render('joomla.modal.main',
$fileModalData); ?>
<?php // Folder Modal
$folderModalData = array(
'selector' => 'folderModal',
'params' => array(
'title' =>
JText::_('COM_TEMPLATES_MANAGE_FOLDERS'),
'footer' =>
$this->loadTemplate('modal_folder_footer'),
),
'body' =>
$this->loadTemplate('modal_folder_body'),
);
?>
<?php echo JLayoutHelper::render('joomla.modal.main',
$folderModalData); ?>
<?php if ($this->type == 'image') : ?>
<?php // Resize Modal
$resizeModalData = array(
'selector' => 'resizeModal',
'params' => array(
'title' =>
JText::_('COM_TEMPLATES_RESIZE_IMAGE'),
'footer' =>
$this->loadTemplate('modal_resize_footer'),
),
'body' =>
$this->loadTemplate('modal_resize_body'),
);
?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.resizeImage&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post">
<?php echo JLayoutHelper::render('joomla.modal.main',
$resizeModalData); ?>
<?php echo JHtml::_('form.token'); ?>
</form>
<?php endif;
?>PK��[#f�>OO+views/template/tmpl/default_description.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<div class="pull-left">
<?php echo JHtml::_('templates.thumb',
$this->template->element, $this->template->client_id); ?>
<?php echo JHtml::_('templates.thumbModal',
$this->template->element, $this->template->client_id); ?>
</div>
<h2><?php echo ucfirst($this->template->element);
?></h2>
<?php $client =
JApplicationHelper::getClientInfo($this->template->client_id); ?>
<p><?php $this->template->xmldata =
TemplatesHelper::parseXMLTemplateFile($client->path,
$this->template->element); ?></p>
<p><?php echo
JText::_($this->template->xmldata->description);
?></p>PK��[��l!!'views/template/tmpl/default_folders.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
ksort($this->files, SORT_STRING);
?>
<ul class='nav nav-list directory-tree'>
<?php foreach ($this->files as $key => $value) : ?>
<?php if (is_array($value)) : ?>
<li class="folder-select">
<a class='folder-url nowrap' data-id='<?php echo
base64_encode($key); ?>' href=''>
<span class='icon-folder'> <?php
$explodeArray = explode('/', $key); echo
$this->escape(end($explodeArray)); ?></span>
</a>
<?php echo $this->folderTree($value); ?>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
PK��[��ss/views/template/tmpl/default_modal_copy_body.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<div id="template-manager-copy"
class="container-fluid">
<div class="row-fluid">
<div class="form-horizontal">
<div class="control-group">
<div class="control-label">
<label for="new_name" class="modalTooltip"
title="<?php echo JHtml::_('tooltipText',
'COM_TEMPLATES_TEMPLATE_NEW_NAME_LABEL',
'COM_TEMPLATES_TEMPLATE_NEW_NAME_DESC'); ?>">
<?php echo
JText::_('COM_TEMPLATES_TEMPLATE_NEW_NAME_LABEL'); ?>
</label>
</div>
<div class="controls">
<input class="input-xlarge" type="text"
id="new_name" name="new_name" />
</div>
</div>
</div>
</div>
</div>
PK��[���1views/template/tmpl/default_modal_copy_footer.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<button type="button" class="btn"
data-dismiss="modal"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button>
<button type="submit" class="btn
btn-primary"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_COPY'); ?></button>
PK��[g���1views/template/tmpl/default_modal_delete_body.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<div id="template-manager-delete"
class="container-fluid">
<div class="row-fluid">
<p><?php echo
JText::sprintf('COM_TEMPLATES_MODAL_FILE_DELETE',
$this->fileName); ?></p>
</div>
</div>PK��[�;��3views/template/tmpl/default_modal_delete_footer.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
$input = JFactory::getApplication()->input;
?>
<form method="post" action="">
<input type="hidden" name="option"
value="com_templates" />
<input type="hidden" name="task"
value="template.delete" />
<input type="hidden" name="id" value="<?php
echo $input->getInt('id'); ?>" />
<input type="hidden" name="file"
value="<?php echo $this->file; ?>" />
<?php echo JHtml::_('form.token'); ?>
<button type="button" class="btn"
data-dismiss="modal"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button>
<button type="submit" class="btn
btn-danger"><?php echo
JText::_('COM_TEMPLATES_BUTTON_DELETE'); ?></button>
</form>
PK��[)�+i
i
/views/template/tmpl/default_modal_file_body.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
$input = JFactory::getApplication()->input;
?>
<div id="template-manager-file"
class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="span6 column-right">
<form method="post" action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.createFile&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" class="well">
<fieldset class="form-inline">
<label><?php echo
JText::_('COM_TEMPLATES_FILE_NAME'); ?></label>
<input type="text" name="name" required />
<select class="input-medium"
data-chosen="true" name="type" required >
<option value="">- <?php echo
JText::_('COM_TEMPLATES_NEW_FILE_SELECT'); ?> -</option>
<option value="css">css</option>
<option value="php">php</option>
<option value="js">js</option>
<option value="xml">xml</option>
<option value="ini">ini</option>
<option value="less">less</option>
<option value="sass">sass</option>
<option value="scss">scss</option>
<option value="txt">txt</option>
</select>
<input type="hidden" class="address"
name="address" />
<?php echo JHtml::_('form.token'); ?>
<input type="submit" value="<?php echo
JText::_('COM_TEMPLATES_BUTTON_CREATE'); ?>"
class="btn btn-primary" />
</fieldset>
</form>
<form method="post" action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.uploadFile&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" class="well"
enctype="multipart/form-data">
<fieldset class="form-inline">
<input type="hidden" class="address"
name="address" />
<input type="file" name="files" required />
<?php echo JHtml::_('form.token'); ?>
<input type="submit" value="<?php echo
JText::_('COM_TEMPLATES_BUTTON_UPLOAD'); ?>"
class="btn btn-primary" /><br>
<?php $cMax =
$this->state->get('params')->get('upload_limit');
?>
<?php $maxSize = JHtml::_('number.bytes',
JUtility::getMaxUploadSize($cMax . 'MB')); ?>
<?php echo
JText::sprintf('JGLOBAL_MAXIMUM_UPLOAD_SIZE_LIMIT', $maxSize);
?>
</fieldset>
</form>
<?php if ($this->type != 'home') : ?>
<form method="post" action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.copyFile&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" class="well"
enctype="multipart/form-data">
<fieldset class="form-inline">
<input type="hidden" class="address"
name="address" />
<label for="new_name" class="modalTooltip"
title="<?php echo JHtml::_('tooltipText',
'COM_TEMPLATES_FILE_NEW_NAME_DESC'); ?>">
<?php echo
JText::_('COM_TEMPLATES_FILE_NEW_NAME_LABEL')?>
</label>
<input type="text" id="new_name"
name="new_name" required />
<?php echo JHtml::_('form.token'); ?>
<input type="submit" value="<?php echo
JText::_('COM_TEMPLATES_BUTTON_COPY_FILE'); ?>"
class="btn btn-primary" />
</fieldset>
</form>
<?php endif; ?>
</div>
<div class="span6 column-left">
<?php echo $this->loadTemplate('folders'); ?>
<hr class="hr-condensed" />
</div>
</div>
</div>
</div>
PK��[v��t��1views/template/tmpl/default_modal_file_footer.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<button type="button" class="btn"
data-dismiss="modal"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button>
PK��[��fx��1views/template/tmpl/default_modal_folder_body.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
$input = JFactory::getApplication()->input;
?>
<div id="template-manager-folder"
class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="span6 column-right">
<form method="post" action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.createFolder&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" class="well">
<fieldset class="form-inline">
<label><?php echo
JText::_('COM_TEMPLATES_FOLDER_NAME'); ?></label>
<input type="text" name="name" required />
<input type="hidden" class="address"
name="address" />
<?php echo JHtml::_('form.token'); ?>
<input type="submit" value="<?php echo
JText::_('COM_TEMPLATES_BUTTON_CREATE'); ?>"
class="btn btn-primary" />
</fieldset>
</form>
</div>
<div class="span6 column-left">
<?php echo $this->loadTemplate('folders'); ?>
<hr class="hr-condensed" />
</div>
</div>
</div>
</div>
PK��[;C��mm3views/template/tmpl/default_modal_folder_footer.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
$input = JFactory::getApplication()->input;
?>
<form id="deleteFolder" method="post"
action="<?php echo
JRoute::_('index.php?option=com_templates&task=template.deleteFolder&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>">
<fieldset>
<button type="button" class="btn"
data-dismiss="modal"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button>
<input type="hidden" class="address"
name="address" />
<?php echo JHtml::_('form.token'); ?>
<input type="submit" value="<?php echo
JText::_('COM_TEMPLATES_BUTTON_DELETE'); ?>"
class="btn btn-danger" />
</fieldset>
</form>
PK��[��*���1views/template/tmpl/default_modal_rename_body.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<div id="template-manager-rename"
class="container-fluid">
<div class="row-fluid">
<div class="form-horizontal">
<div class="control-group">
<div class="control-label">
<label for="new_name" class="modalTooltip"
title="<?php echo JHtml::_('tooltipText',
JText::_('COM_TEMPLATES_NEW_FILE_NAME')); ?>">
<?php echo JText::_('COM_TEMPLATES_NEW_FILE_NAME')?>
</label>
</div>
<div class="controls">
<div class="input-append">
<input class="input-xlarge" type="text"
name="new_name" required />
<span class="add-on">.<?php echo
JFile::getExt($this->fileName); ?></span>
</div>
</div>
</div>
</div>
</div>
</div>
PK��[cq2�3views/template/tmpl/default_modal_rename_footer.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<button type="button" class="btn"
data-dismiss="modal"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button>
<button type="submit" class="btn
btn-primary"><?php echo
JText::_('COM_TEMPLATES_BUTTON_RENAME'); ?></button>
PK��[������1views/template/tmpl/default_modal_resize_body.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<div id="template-manager-resize"
class="container-fluid">
<div class="row-fluid">
<div class="control-group">
<div class="control-label">
<label for="height" class="modalTooltip"
title="<?php echo JHtml::_('tooltipText',
'COM_TEMPLATES_IMAGE_HEIGHT'); ?>">
<?php echo JText::_('COM_TEMPLATES_IMAGE_HEIGHT')?>
</label>
</div>
<div class="controls">
<input class="input-xlarge" type="number"
name="height" placeholder="<?php echo
$this->image['height']; ?> px" required />
</div>
</div>
<div class="control-group">
<div class="control-label">
<label for="width" class="modalTooltip"
title="<?php echo JHtml::_('tooltipText',
'COM_TEMPLATES_IMAGE_WIDTH'); ?>">
<?php echo JText::_('COM_TEMPLATES_IMAGE_WIDTH')?>
</label>
</div>
<div class="controls">
<input class="input-xlarge" type="number"
name="width" placeholder="<?php echo
$this->image['width']; ?> px" required />
</div>
</div>
</div>
</div>
PK��[��:3views/template/tmpl/default_modal_resize_footer.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
?>
<button type="button" class="btn"
data-dismiss="modal"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_CLOSE'); ?></button>
<button type="submit" class="btn
btn-primary"><?php echo
JText::_('COM_TEMPLATES_BUTTON_RESIZE'); ?></button>
PK��[-�ɻpp$views/template/tmpl/default_tree.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// use ksort() with SORT_NATURAL flag when minimum PHP is 5.4.
uksort($this->files, 'strnatcmp');
?>
<ul class='nav nav-list directory-tree'>
<?php foreach ($this->files as $key => $value) : ?>
<?php if (is_array($value)) : ?>
<?php
$keyArray = explode('/', $key);
$fileArray = explode('/', $this->fileName);
$count = 0;
$keyArrayCount = count($keyArray);
if (count($fileArray) >= $keyArrayCount)
{
for ($i = 0; $i < $keyArrayCount; $i++)
{
if ($keyArray[$i] === $fileArray[$i])
{
$count++;
}
}
if ($count === $keyArrayCount)
{
$class = 'folder show';
}
else
{
$class = 'folder';
}
}
else
{
$class = 'folder';
}
?>
<li class="<?php echo $class; ?>">
<a class='folder-url nowrap' href=''>
<span class='icon-folder'> <?php
$explodeArray = explode('/', $key); echo
$this->escape(end($explodeArray)); ?></span>
</a>
<?php echo $this->directoryTree($value); ?>
</li>
<?php endif; ?>
<?php if (is_object($value)) : ?>
<li>
<a class="file nowrap" href='<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. $this->id . '&file=' . $value->id) ?>'>
<span class='icon-file'> <?php echo
$this->escape($value->name); ?></span>
</a>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
PK��[3ɰzZZ
views/template/tmpl/readonly.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
$input = JFactory::getApplication()->input;
?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. $input->getInt('id') . '&file=' .
$this->file); ?>" method="post"
name="adminForm" id="adminForm"
class="form-horizontal">
<?php echo JHtml::_('bootstrap.startTabSet',
'myTab', array('active' =>
'description')); ?>
<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'description',
JText::_('COM_TEMPLATES_TAB_DESCRIPTION')); ?>
<?php echo $this->loadTemplate('description'); ?>
<?php echo JHtml::_('bootstrap.endTab'); ?>
<?php echo JHtml::_('bootstrap.endTabSet'); ?>
<input type="hidden" name="task" value=""
/>
<?php echo JHtml::_('form.token'); ?>
</form>
PK��[!�Jviews/template/view.html.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* View to edit a template style.
*
* @since 1.6
*/
class TemplatesViewTemplate extends JViewLegacy
{
/**
* For loading extension state
*/
protected $state;
/**
* For loading template details
*/
protected $template;
/**
* For loading the source form
*/
protected $form;
/**
* For loading source file contents
*/
protected $source;
/**
* Extension id
*/
protected $id;
/**
* Encrypted file path
*/
protected $file;
/**
* List of available overrides
*/
protected $overridesList;
/**
* Name of the present file
*/
protected $fileName;
/**
* Type of the file - image, source, font
*/
protected $type;
/**
* For loading image information
*/
protected $image;
/**
* Template id for showing preview button
*/
protected $preview;
/**
* For loading font information
*/
protected $font;
/**
* A nested array containing lst of files and folders
*/
protected $files;
/**
* An array containing a list of compressed files
*/
protected $archive;
/**
* Execute and display a template script.
*
* @param string $tpl The name of the template file to parse;
automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise an Error object.
*/
public function display($tpl = null)
{
$app = JFactory::getApplication();
$this->file = $app->input->get('file');
$this->fileName =
JFilterInput::getInstance()->clean(base64_decode($this->file),
'string');
$explodeArray = explode('.', $this->fileName);
$ext = end($explodeArray);
$this->files = $this->get('Files');
$this->state = $this->get('State');
$this->template = $this->get('Template');
$this->preview = $this->get('Preview');
$params = JComponentHelper::getParams('com_templates');
$imageTypes = explode(',',
$params->get('image_formats'));
$sourceTypes = explode(',',
$params->get('source_formats'));
$fontTypes = explode(',',
$params->get('font_formats'));
$archiveTypes = explode(',',
$params->get('compressed_formats'));
if (in_array($ext, $sourceTypes))
{
$this->form = $this->get('Form');
$this->form->setFieldAttribute('source',
'syntax', $ext);
$this->source = $this->get('Source');
$this->type = 'file';
}
elseif (in_array($ext, $imageTypes))
{
$this->image = $this->get('Image');
$this->type = 'image';
}
elseif (in_array($ext, $fontTypes))
{
$this->font = $this->get('Font');
$this->type = 'font';
}
elseif (in_array($ext, $archiveTypes))
{
$this->archive = $this->get('Archive');
$this->type = 'archive';
}
else
{
$this->type = 'home';
}
$this->overridesList = $this->get('OverridesList');
$this->id =
$this->state->get('extension.id');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
$app->enqueueMessage(implode("\n", $errors));
return false;
}
$this->addToolbar();
if (!JFactory::getUser()->authorise('core.admin'))
{
$this->setLayout('readonly');
}
return parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @since 1.6
*
* @return void
*/
protected function addToolbar()
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
$app->input->set('hidemainmenu', true);
// User is global SuperUser
$isSuperUser = $user->authorise('core.admin');
// Get the toolbar object instance
$bar = JToolbar::getInstance('toolbar');
$explodeArray = explode('.', $this->fileName);
$ext = end($explodeArray);
JToolbarHelper::title(JText::sprintf('COM_TEMPLATES_MANAGER_VIEW_TEMPLATE',
ucfirst($this->template->name)), 'eye thememanager');
// Only show file edit buttons for global SuperUser
if ($isSuperUser)
{
// Add an Apply and save button
if ($this->type == 'file')
{
JToolbarHelper::apply('template.apply');
JToolbarHelper::save('template.save');
}
// Add a Crop and Resize button
elseif ($this->type == 'image')
{
JToolbarHelper::custom('template.cropImage',
'move', 'move', 'COM_TEMPLATES_BUTTON_CROP',
false);
JToolbarHelper::modal('resizeModal',
'icon-refresh', 'COM_TEMPLATES_BUTTON_RESIZE');
}
// Add an extract button
elseif ($this->type == 'archive')
{
JToolbarHelper::custom('template.extractArchive',
'arrow-down', 'arrow-down',
'COM_TEMPLATES_BUTTON_EXTRACT_ARCHIVE', false);
}
// Add a copy template button (Hathor override doesn't need the
button)
if ($app->getTemplate() != 'hathor')
{
JToolbarHelper::modal('copyModal', 'icon-copy',
'COM_TEMPLATES_BUTTON_COPY_TEMPLATE');
}
}
// Add a Template preview button
if ($this->preview->client_id == 0)
{
$bar->appendButton('Popup', 'picture',
'COM_TEMPLATES_BUTTON_PREVIEW', JUri::root() .
'index.php?tp=1&templateStyle=' . $this->preview->id,
800, 520);
}
// Only show file manage buttons for global SuperUser
if ($isSuperUser)
{
// Add Manage folders button
JToolbarHelper::modal('folderModal', 'icon-folder icon
white', 'COM_TEMPLATES_BUTTON_FOLDERS');
// Add a new file button
JToolbarHelper::modal('fileModal', 'icon-file',
'COM_TEMPLATES_BUTTON_FILE');
// Add a Rename file Button (Hathor override doesn't need the
button)
if ($app->getTemplate() != 'hathor' &&
$this->type != 'home')
{
JToolbarHelper::modal('renameModal',
'icon-refresh', 'COM_TEMPLATES_BUTTON_RENAME_FILE');
}
// Add a Delete file Button
if ($this->type != 'home')
{
JToolbarHelper::modal('deleteModal', 'icon-remove',
'COM_TEMPLATES_BUTTON_DELETE_FILE');
}
// Add a Compile Button
if ($ext == 'less')
{
JToolbarHelper::custom('template.less', 'play',
'play', 'COM_TEMPLATES_BUTTON_LESS', false);
}
}
if ($this->type == 'home')
{
JToolbarHelper::cancel('template.cancel',
'JTOOLBAR_CLOSE');
}
else
{
JToolbarHelper::cancel('template.close',
'COM_TEMPLATES_BUTTON_CLOSE_FILE');
}
JToolbarHelper::divider();
JToolbarHelper::help('JHELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES_EDIT');
}
/**
* Method for creating the collapsible tree.
*
* @param array $array The value of the present node for recursion
*
* @return string
*
* @note Uses recursion
* @since 3.2
*/
protected function directoryTree($array)
{
$temp = $this->files;
$this->files = $array;
$txt = $this->loadTemplate('tree');
$this->files = $temp;
return $txt;
}
/**
* Method for listing the folder tree in modals.
*
* @param array $array The value of the present node for recursion
*
* @return string
*
* @note Uses recursion
* @since 3.2
*/
protected function folderTree($array)
{
$temp = $this->files;
$this->files = $array;
$txt = $this->loadTemplate('folders');
$this->files = $temp;
return $txt;
}
}
PK��[^;�
views/templates/tmpl/default.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');
$user = JFactory::getUser();
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirn =
$this->escape($this->state->get('list.direction'));
?>
<form action="<?php echo
JRoute::_('index.php?option=com_templates&view=templates');
?>" method="post" name="adminForm"
id="adminForm">
<?php if (!empty($this->sidebar)) : ?>
<div id="j-sidebar-container" class="span2">
<?php echo $this->sidebar; ?>
</div>
<div id="j-main-container" class="span10">
<?php else : ?>
<div id="j-main-container">
<?php endif; ?>
<?php echo
JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this, 'options' =>
array('selectorFieldName' => 'client_id'))); ?>
<?php if ($this->total > 0) : ?>
<table class="table table-striped"
id="template-mgr">
<thead>
<tr>
<th class="col1template hidden-phone"
width="20%">
<?php echo JText::_('COM_TEMPLATES_HEADING_IMAGE');
?>
</th>
<th width="30%">
<?php echo JHtml::_('searchtools.sort',
'COM_TEMPLATES_HEADING_TEMPLATE', 'a.element',
$listDirn, $listOrder); ?>
</th>
<th width="10%" class="hidden-phone">
<?php echo JText::_('JVERSION'); ?>
</th>
<th width="15%" class="hidden-phone">
<?php echo JText::_('JDATE'); ?>
</th>
<th width="25%" class="hidden-phone">
<?php echo JText::_('JAUTHOR'); ?>
</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="5">
<?php echo $this->pagination->getListFooter(); ?>
</td>
</tr>
</tfoot>
<tbody>
<?php foreach ($this->items as $i => $item) : ?>
<tr class="row<?php echo $i % 2; ?>">
<td class="center hidden-phone">
<?php echo JHtml::_('templates.thumb',
$item->element, $item->client_id); ?>
<?php echo JHtml::_('templates.thumbModal',
$item->element, $item->client_id); ?>
</td>
<td class="template-name">
<a href="<?php echo
JRoute::_('index.php?option=com_templates&view=template&id='
. (int) $item->extension_id . '&file=' . $this->file);
?>">
<?php echo
JText::sprintf('COM_TEMPLATES_TEMPLATE_DETAILS',
ucfirst($item->name)); ?></a>
<div>
<?php if ($this->preview && $item->client_id ==
'0') : ?>
<a href="<?php echo JRoute::_(JUri::root() .
'index.php?tp=1&template=' . $item->element); ?>"
target="_blank">
<?php echo JText::_('COM_TEMPLATES_TEMPLATE_PREVIEW');
?>
</a>
<?php elseif ($item->client_id == '1') : ?>
<?php echo
JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW_ADMIN'); ?>
<?php else : ?>
<span class="hasTooltip" title="<?php echo
JHtml::_('tooltipText',
'COM_TEMPLATES_TEMPLATE_NO_PREVIEW_DESC');
?>"><?php echo
JText::_('COM_TEMPLATES_TEMPLATE_NO_PREVIEW'); ?></span>
<?php endif; ?>
</div>
</td>
<td class="small hidden-phone">
<?php echo
$this->escape($item->xmldata->get('version')); ?>
</td>
<td class="small hidden-phone">
<?php echo
$this->escape($item->xmldata->get('creationDate'));
?>
</td>
<td class="hidden-phone">
<?php if ($author = $item->xmldata->get('author'))
: ?>
<div><?php echo $this->escape($author);
?></div>
<?php else : ?>
—
<?php endif; ?>
<?php if ($email =
$item->xmldata->get('authorEmail')) : ?>
<div><?php echo $this->escape($email); ?></div>
<?php endif; ?>
<?php if ($url = $item->xmldata->get('authorUrl'))
: ?>
<div><a href="<?php echo $this->escape($url);
?>"><?php echo $this->escape($url);
?></a></div>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<input type="hidden" name="task" value=""
/>
<input type="hidden" name="boxchecked"
value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
PK��[��r
��
views/templates/tmpl/default.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<metadata>
<layout
title="COM_TEMPLATES_TEMPLATES_VIEW_DEFAULT_TITLE">
<message>
<![CDATA[COM_TEMPLATES_TEMPLATES_VIEW_DEFAULT_DESC]]>
</message>
</layout>
</metadata>
PK��[�N� � views/templates/view.html.phpnu�[���<?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* View class for a list of template styles.
*
* @since 1.6
*/
class TemplatesViewTemplates extends JViewLegacy
{
/**
* @var array
* @since 1.6
*/
protected $items;
/**
* @var object
* @since 1.6
*/
protected $pagination;
/**
* @var object
* @since 1.6
*/
protected $state;
/**
* @var string
* @since 3.2
*/
protected $file;
/**
* Execute and display a template script.
*
* @param string $tpl The name of the template file to parse;
automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @since 1.6
*/
public function display($tpl = null)
{
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->total = $this->get('Total');
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
$this->preview =
JComponentHelper::getParams('com_templates')->get('template_positions_display');
$this->file = base64_encode('home');
TemplatesHelper::addSubmenu('templates');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new Exception(implode("\n", $errors), 500);
}
$this->addToolbar();
return parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*
* @since 1.6
*/
protected function addToolbar()
{
$canDo = JHelperContent::getActions('com_templates');
// Set the title.
if ((int) $this->get('State')->get('client_id')
=== 1)
{
JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_TEMPLATES_ADMIN'),
'eye thememanager');
}
else
{
JToolbarHelper::title(JText::_('COM_TEMPLATES_MANAGER_TEMPLATES_SITE'),
'eye thememanager');
}
if ($canDo->get('core.admin') ||
$canDo->get('core.options'))
{
JToolbarHelper::preferences('com_templates');
JToolbarHelper::divider();
}
JToolbarHelper::help('JHELP_EXTENSIONS_TEMPLATE_MANAGER_TEMPLATES');
JHtmlSidebar::setAction('index.php?option=com_templates&view=templates');
$this->sidebar = JHtmlSidebar::render();
}
}
PKTu�[�6�
index.htmlnu�[���PKTu�[b3�VVYX9ca401dc5c83ea71321893da14a56979-cache-com_templates-684a70c70c7a434505a173a5221dea02.phpnu�[���PKTu�[b3�VVY7
9ca401dc5c83ea71321893da14a56979-cache-com_templates-093607fbfc00be0cbfe5d9593ee81ea1.phpnu�[���PKTu�[b3�VVY9ca401dc5c83ea71321893da14a56979-cache-com_templates-8e04e0707ff0b8210965c751d477f8ff.phpnu�[���PK��[>�jc66
�&access.xmlnu�[���PK��[�G�[jj
e*config.xmlnu�[���PK��[��)��� 2controller.phpnu�[���PK��[͖����:controllers/style.phpnu�[���PK��[Z�R�/Jcontrollers/styles.phpnu�[���PK��[~ ?�Y�Y�Vcontrollers/template.phpnu�[���PK��[�5]J�
�
��helpers/html/templates.phpnu�[���PK��[*�
0�helpers/template.phpnu�[���PK��[�_vvC�helpers/templates.phpnu�[���PK��[ԉ���"��models/fields/templatelocation.phpnu�[���PK��[������models/fields/templatename.phpnu�[���PK��[e�D�����models/forms/filter_styles.xmlnu�[���PK��[fl�!��models/forms/filter_templates.xmlnu�[���PK��[�_���models/forms/source.xmlnu�[���PK��[[U�r���models/forms/style.xmlnu�[���PK��[���gg$�models/forms/style_administrator.xmlnu�[���PK��[���CC�models/forms/style_site.xmlnu�[���PK��[3�3��F�F9models/style.phpnu�[���PK��[��vJmodels/styles.phpnu�[���PK��[���C��^emodels/template.phpnu�[���PK��[��������models/templates.phpnu�[���PK��[? Z���tables/style.phpnu�[���PK��[�Z%ܴ�
�templates.phpnu�[���PK��[���$$
wtemplates.xmlnu�[���PK��[}i2{�
�
�views/style/tmpl/edit.phpnu�[���PK��[�6ҡ�$�*views/style/tmpl/edit_assignment.phpnu�[���PK��[�_�//!�3views/style/tmpl/edit_options.phpnu�[���PK��[��c�� � 9views/style/view.html.phpnu�[���PK��[��_�aCviews/style/view.json.phpnu�[���PK��[m�����Hviews/styles/tmpl/default.phpnu�[���PK��[C��^���dviews/styles/tmpl/default.xmlnu�[���PK��[\�n��
�
�eviews/styles/view.html.phpnu�[���PK��[wx&v�H�H�pviews/template/tmpl/default.phpnu�[���PK��[#f�>OO+ȹviews/template/tmpl/default_description.phpnu�[���PK��[��l!!'r�views/template/tmpl/default_folders.phpnu�[���PK��[��ss/�views/template/tmpl/default_modal_copy_body.phpnu�[���PK��[���1��views/template/tmpl/default_modal_copy_footer.phpnu�[���PK��[g���1�views/template/tmpl/default_modal_delete_body.phpnu�[���PK��[�;��3U�views/template/tmpl/default_modal_delete_footer.phpnu�[���PK��[)�+i
i
/E�views/template/tmpl/default_modal_file_body.phpnu�[���PK��[v��t��1
�views/template/tmpl/default_modal_file_footer.phpnu�[���PK��[��fx��1�views/template/tmpl/default_modal_folder_body.phpnu�[���PK��[;C��mm3+�views/template/tmpl/default_modal_folder_footer.phpnu�[���PK��[��*���1��views/template/tmpl/default_modal_rename_body.phpnu�[���PK��[cq2�3�views/template/tmpl/default_modal_rename_footer.phpnu�[���PK��[������1y�views/template/tmpl/default_modal_resize_body.phpnu�[���PK��[��:3��views/template/tmpl/default_modal_resize_footer.phpnu�[���PK��[-�ɻpp$�views/template/tmpl/default_tree.phpnu�[���PK��[3ɰzZZ
�views/template/tmpl/readonly.phpnu�[���PK��[!�J��views/template/view.html.phpnu�[���PK��[^;�
�views/templates/tmpl/default.phpnu�[���PK��[��r
��
�,views/templates/tmpl/default.xmlnu�[���PK��[�N� � �-views/templates/view.html.phpnu�[���PK99��7