You've already forked joomla_test
first commit
This commit is contained in:
286
administrator/components/com_templates/models/template.php
Normal file
286
administrator/components/com_templates/models/template.php
Normal file
@ -0,0 +1,286 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_templates
|
||||
*
|
||||
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_templates
|
||||
* @since 1.6
|
||||
*/
|
||||
class TemplatesModelTemplate extends JModelLegacy
|
||||
{
|
||||
protected $template = null;
|
||||
|
||||
/**
|
||||
* Internal method to get file properties.
|
||||
*
|
||||
* @param string The base path.
|
||||
* @param string The file name.
|
||||
* @return object
|
||||
* @since 1.6
|
||||
*/
|
||||
protected function getFile($path, $name)
|
||||
{
|
||||
$temp = new stdClass;
|
||||
|
||||
if ($template = $this->getTemplate())
|
||||
{
|
||||
$temp->name = $name;
|
||||
$temp->exists = file_exists($path.$name);
|
||||
$temp->id = urlencode(base64_encode($template->extension_id.':'.$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');
|
||||
|
||||
$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, false)
|
||||
|| $lang->load('tpl_'.$template->element, $client->path.'/templates/'.$template->element, null, false, false)
|
||||
|| $lang->load('tpl_'.$template->element, $client->path, $lang->getDefault(), false, false)
|
||||
|| $lang->load('tpl_'.$template->element, $client->path.'/templates/'.$template->element, $lang->getDefault(), false, false);
|
||||
|
||||
// Check if the template path exists.
|
||||
|
||||
if (is_dir($path))
|
||||
{
|
||||
$result['main'] = array();
|
||||
$result['css'] = array();
|
||||
$result['clo'] = array();
|
||||
$result['mlo'] = array();
|
||||
$result['html'] = array();
|
||||
|
||||
// Handle the main PHP files.
|
||||
$result['main']['index'] = $this->getFile($path, 'index.php');
|
||||
$result['main']['error'] = $this->getFile($path, 'error.php');
|
||||
$result['main']['print'] = $this->getFile($path, 'component.php');
|
||||
$result['main']['offline'] = $this->getFile($path, 'offline.php');
|
||||
|
||||
// Handle the CSS files.
|
||||
$files = JFolder::files($path.'/css', '\.css$', false, false);
|
||||
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$result['css'][] = $this->getFile($path.'/css/', 'css/'.$file);
|
||||
}
|
||||
} else {
|
||||
$this->setError(JText::_('COM_TEMPLATES_ERROR_TEMPLATE_FOLDER_NOT_FOUND'));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to auto-populate the model state.
|
||||
*
|
||||
* Note. Calling getState in this method will result in recursion.
|
||||
*
|
||||
* @since 1.6
|
||||
*/
|
||||
protected function populateState()
|
||||
{
|
||||
$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();
|
||||
|
||||
// Get the template information.
|
||||
$query = $db->getQuery(true)
|
||||
->select('extension_id, client_id, element')
|
||||
->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)
|
||||
{
|
||||
$this->setError($e->getMessage());
|
||||
$this->template = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($result))
|
||||
{
|
||||
$this->setError(JText::_('COM_TEMPLATES_ERROR_EXTENSION_RECORD_NOT_FOUND'));
|
||||
$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()
|
||||
{
|
||||
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))
|
||||
{
|
||||
JError::raiseWarning(403, JText::_('COM_TEMPLATES_ERROR_COULD_NOT_WRITE'));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Copy all files from $fromName template to $newName folder
|
||||
if (!JFolder::copy($fromPath, $toPath) || !$this->fixTemplateName())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
JError::raiseWarning(403, JText::_('COM_TEMPLATES_ERROR_INVALID_FROM_NAME'));
|
||||
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'));
|
||||
$oldName = $this->getTemplate()->element;
|
||||
|
||||
jimport('joomla.filesystem.file');
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$newFile = str_replace($oldName, $newName, $file);
|
||||
$result = JFile::move($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*' . $oldName . '\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;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user