%PDF- %PDF-
| Direktori : /home/lightco1/www/feiss.com.au/plugins/system/t3/includes/admin/ |
| Current File : /home/lightco1/www/feiss.com.au/plugins/system/t3/includes/admin/layout.php |
<?php
/**
*------------------------------------------------------------------------------
* @package T3 Framework for Joomla!
*------------------------------------------------------------------------------
* @copyright Copyright (C) 2004-2013 JoomlArt.com. All Rights Reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @authors JoomlArt, JoomlaBamboo, (contribute to this project at github
* & Google group to become co-author)
* @Google group: https://groups.google.com/forum/#!forum/t3fw
* @Link: http://t3-framework.org
*------------------------------------------------------------------------------
*/
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
/**
* Layout helper module class
*/
class T3AdminLayout
{
public static function response($result = array())
{
die(json_encode($result));
}
public static function error($msg = '')
{
return self::response(array(
'error' => $msg
));
}
public static function display()
{
$app = JFactory::getApplication();
$input = $app->input;
if (!$app->isAdmin()) {
$tpl = $app->getTemplate(true);
// get template name
if ($input->getCmd('t3action') && ($styleid = $input->getInt('styleid', '')) && $tpl->id != $styleid) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('template, params');
$query->from('#__template_styles');
$query->where('client_id = 0');
$query->where('id = ' . $styleid);
$db->setQuery($query);
$tpl = $db->loadObject();
if ($tpl) {
$registry = new JRegistry;
$registry->loadString($tpl->params);
$tpl->params = $registry;
}
if (!$tpl) {
die(json_encode(array(
'error' => JText::_('T3_MSG_UNKNOW_ACTION')
)));
}
}
} else {
$tplid = $input->getCmd('view') == 'style' ? $input->getCmd('id', 0) : false;
if (!$tplid) {
die(json_encode(array(
'error' => JText::_('T3_MSG_UNKNOW_ACTION')
)));
}
$cache = JFactory::getCache('com_templates', '');
if (!$templates = $cache->get('t3tpl')) {
// Load styles
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id, home, template, s.params');
$query->from('#__template_styles as s');
$query->where('s.client_id = 0');
$query->where('e.enabled = 1');
$query->leftJoin('#__extensions as e ON e.element=s.template AND e.type=' . $db->quote('template') . ' AND e.client_id=s.client_id');
$db->setQuery($query);
$templates = $db->loadObjectList('id');
foreach ($templates as &$template) {
$registry = new JRegistry;
$registry->loadString($template->params);
$template->params = $registry;
}
$cache->store($templates, 't3tpl');
}
if (isset($templates[$tplid])) {
$tpl = $templates[$tplid];
} else {
$tpl = $templates[0];
}
}
//load language for template
JFactory::getLanguage()->load('tpl_' . T3_TEMPLATE, JPATH_SITE);
//clean all unnecessary datas
if(ob_get_length()){
@ob_end_clean();
}
$t3app = T3::getSite($tpl);
$layout = $t3app->getLayout();
$t3app->loadLayout($layout);
$lbuffer = ob_get_clean();
die($lbuffer);
}
public static function save()
{
// Initialize some variables
$input = JFactory::getApplication()->input;
$template = $input->getCmd('template');
$layout = $input->getCmd('layout');
if (!$template || !$layout) {
return self::error(JText::_('T3_LAYOUT_INVALID_DATA_TO_SAVE'));
}
// store layout configuration into custom directory
$file = T3Path::getLocalPath ('etc/layout/' . $layout . '.ini');
if (!is_dir(dirname($file))) {
JFolder::create(dirname($file));
}
$params = new JRegistry();
$params->loadObject($_POST);
$data = $params->toString('INI');
if (!@JFile::write($file, $data)) {
return self::error(JText::_('T3_LAYOUT_OPERATION_FAILED'));
}
return self::response(array(
'successful' => JText::sprintf('T3_LAYOUT_SAVE_SUCCESSFULLY', $layout),
'layout' => $layout,
'type' => 'new'
));
}
public static function copy()
{
// Initialize some variables
$input = JFactory::getApplication()->input;
$template = $input->getCmd('template');
$original = $input->getCmd('original');
$layout = $input->getCmd('layout');
//safe name
$layout = JApplication::stringURLSafe($layout);
if (!$template || !$original || !$layout) {
return self::error(JText::_('T3_LAYOUT_INVALID_DATA_TO_SAVE'));
}
// clone to CUSTOM dir
$source = T3Path::getPath('tpls/' . $original . '.php');
$dest = T3Path::getLocalPath('tpls/' . $layout . '.php');
$confsource = T3Path::getPath('etc/layout/'. $layout . '.ini');
$confdest = T3Path::getLocalPath('etc/layout/'. $layout . '.ini');
$params = new JRegistry();
$params->loadObject($_POST);
$data = $params->toString('INI');
if (!is_dir(dirname($confdest))) {
JFolder::create(dirname($confdest));
}
if (!is_dir(dirname($dest))) {
JFolder::create(dirname($dest));
}
if ($data && !@JFile::write($confdest, $data)) {
return self::error(JText::_('T3_LAYOUT_OPERATION_FAILED'));
}
// Check if original file exists
if (JFile::exists($source)) {
// Check if the desired file already exists
if (!JFile::exists($dest)) {
if (!JFile::copy($source, $dest)) {
return self::error(JText::_('T3_LAYOUT_OPERATION_FAILED'));
}
//clone configuration file, we only copy if the target file does not exist
if (!JFile::exists($confdest) && JFile::exists($confsource)) {
JFile::copy($confsource, $confdest);
}
} else {
return self::error(JText::_('T3_LAYOUT_EXISTED'));
}
} else {
return self::error(JText::_('T3_LAYOUT_NOT_FOUND'));
}
return self::response(array(
'successful' => JText::_('T3_LAYOUT_SAVE_SUCCESSFULLY'),
'original' => $original,
'layout' => $layout,
'type' => 'clone'
));
}
public static function delete()
{
// Initialize some variables
$input = JFactory::getApplication()->input;
$layout = $input->getCmd('layout');
$template = $input->getCmd('template');
if (!$layout) {
return self::error(JText::_('T3_LAYOUT_UNKNOW_ACTION'));
}
// delete custom layout
$layoutfile = T3Path::getLocalPath('tpls/' . $layout . '.php');
$initfile = T3Path::getLocalPath('etc/layout/' . $layout . '.ini');
if (!@JFile::delete($layoutfile) || !@JFile::delete($initfile)) {
return self::error(JText::_('T3_LAYOUT_DELETE_FAIL'));
} else {
return self::response(array(
'successful' => JText::_('T3_LAYOUT_DELETE_SUCCESSFULLY'),
'layout' => $layout,
'type' => 'delete'
));
}
}
public static function purge()
{
// Initialize some variables
$input = JFactory::getApplication()->input;
$layout = $input->getCmd('layout');
$template = $input->getCmd('template');
if (!$layout) {
return self::error(JText::_('T3_LAYOUT_UNKNOW_ACTION'));
}
// delete custom layout
$layoutfile = T3Path::getLocalPath('tpls/' . $layout . '.php');
$initfile = T3Path::getLocalPath('etc/layout/' . $layout . '.ini');
// delete default layout
$defaultlayoutfile = T3_TEMPLATE_PATH . '/tpls/' . $layout . '.php';
$defaultinitfile = T3_TEMPLATE_PATH . '/etc/layout/' . $layout . '.ini';
if (!@JFile::delete($layoutfile) || !@JFile::delete($defaultlayoutfile)
|| !@JFile::delete($initfile) || !@JFile::delete($defaultinitfile)
) {
return self::error(JText::_('T3_LAYOUT_DELETE_FAIL'));
} else {
return self::response(array(
'successful' => JText::_('T3_LAYOUT_DELETE_SUCCESSFULLY'),
'layout' => $layout,
'type' => 'delete'
));
}
}
public static function getTplPositions($clientId = 0, $template = '')
{
$positions = array();
$templateBaseDir = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE;
$filePath = JPath::clean($templateBaseDir . '/templates/' . $template . '/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 = $positions['position'];
} else {
$positions = array();
}
}
return $positions;
}
public static function getPositions()
{
$template = T3_TEMPLATE;
$path = JPATH_SITE;
$lang = JFactory::getLanguage();
$clientId = 0;
$state = 1;
$templates = array_keys(self::getTemplates($clientId, $state));
$templateGroups = array();
// Add positions from templates
foreach ($templates as $template) {
$options = array();
$positions = self::getTplPositions($clientId, $template);
if (is_array($positions))
foreach ($positions as $position) {
$text = self::getTranslatedModulePosition($clientId, $template, $position) . ' [' . $position . ']';
$options[] = self::createOption($position, $text);
}
$templateGroups[$template] = self::createOptionGroup(ucfirst($template), $options);
}
// Add custom position to options
$customGroupText = JText::_('T3_LAYOUT_CUSTOM_POSITION');
$customPositions = self::getDbPositions($clientId);
$templateGroups[$customGroupText] = self::createOptionGroup($customGroupText, $customPositions);
return JHtml::_('select.groupedlist', $templateGroups, '', array(
'id' => 'tpl-positions-list',
'list.select' => '',
'list.attr' => 'multiple="multiple" size="10"'
));
}
public static function getDbPositions($clientId)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('DISTINCT(position)')
->from('#__modules')
->where($db->quoteName('client_id') . ' = ' . (int) $clientId)->order('position');
$db->setQuery($query);
try {
$positions = $db->loadColumn();
$positions = is_array($positions) ? $positions : array();
}
catch (RuntimeException $e) {
JError::raiseWarning(500, $e->getMessage());
return;
}
// Build the list
$options = array();
foreach ($positions as $position) {
if ($position) {
$options[] = JHtml::_('select.option', $position, $position);
}
}
return $options;
}
/**
* Create and return a new Option
*
* @param string $value The option value [optional]
* @param string $text The option text [optional]
*
* @return object The option as an object (stdClass instance)
*
* @since 3.0
*/
public static function createOption($value = '', $text = '')
{
if (empty($text)) {
$text = $value;
}
$option = new stdClass;
$option->value = $value;
$option->text = $text;
return $option;
}
/**
* Create and return a new Option Group
*
* @param string $label Value and label for group [optional]
* @param array $options Array of options to insert into group [optional]
*
* @return array Return the new group as an array
*
* @since 3.0
*/
public static function createOptionGroup($label = '', $options = array())
{
$group = array();
$group['value'] = $label;
$group['text'] = $label;
$group['items'] = $options;
return $group;
}
/**
* Check if the string was translated
*
* @param string $langKey Language file text key
* @param string $text The "translated" text to be checked
*
* @return boolean Return true for translated text
*
* @since 3.0
*/
public static function isTranslatedText($langKey, $text)
{
return $text !== $langKey;
}
/**
* Return a translated module position name
*
* @param string $template Template name
* @param string $position Position name
*
* @return string Return a translated position name
*
* @since 3.0
*/
public static function getTranslatedModulePosition($clientId, $template, $position)
{
// Template translation
$lang = JFactory::getLanguage();
$path = $clientId ? JPATH_ADMINISTRATOR : JPATH_SITE;
$lang->load('tpl_' . $template . '.sys', $path, null, false, false)
|| $lang->load('tpl_' . $template . '.sys', $path . '/templates/' . $template, null, false, false)
|| $lang->load('tpl_' . $template . '.sys', $path, $lang->getDefault(), false, false)
|| $lang->load('tpl_' . $template . '.sys', $path . '/templates/' . $template, $lang->getDefault(), false, false);
$langKey = strtoupper('TPL_' . $template . '_POSITION_' . $position);
$text = JText::_($langKey);
// Avoid untranslated strings
if (!self::isTranslatedText($langKey, $text)) {
// Modules component translation
$langKey = strtoupper('COM_MODULES_POSITION_' . $position);
$text = JText::_($langKey);
// Avoid untranslated strings
if (!self::isTranslatedText($langKey, $text)) {
// Try to humanize the position name
$text = ucfirst(preg_replace('/^' . $template . '\-/', '', $position));
$text = ucwords(str_replace(array(
'-',
'_'
), ' ', $text));
}
}
return $text;
}
/**
* Return a list of templates
*
* @param integer $clientId Client ID
* @param string $state State
* @param string $template Template name
*
* @return array List of templates
*/
public static function getTemplates($clientId = 0, $state = '', $template = '')
{
$db = JFactory::getDbo();
// Get the database object and a new query object.
$query = $db->getQuery(true);
// Build the query.
$query
->select('element, name, enabled')
->from('#__extensions')
->where('client_id = ' . (int) $clientId)
->where('type = ' . $db->quote('template'));
if ($state != '') {
$query->where('enabled = ' . $db->quote($state));
}
if ($template != '') {
$query->where('element = ' . $db->quote($template));
}
// Set the query and load the templates.
$db->setQuery($query);
$templates = $db->loadObjectList('element');
return $templates;
}
}