%PDF- %PDF-
| Direktori : /home1/lightco1/www/plugins/system/jsnframework/libraries/joomlashine/template/ |
| Current File : //home1/lightco1/www/plugins/system/jsnframework/libraries/joomlashine/template/helper.php |
<?php
/**
* @version $Id$
* @package JSN_Framework
* @author JoomlaShine Team <support@joomlashine.com>
* @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved.
* @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
*
* Websites: http://www.joomlashine.com
* Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
require dirname(__FILE__) . '/model.php';
// Import necessary Joomla library
jimport('joomla.filesystem.file');
/**
* Helper Class for template loading
*
* Use this class to load default site template,
* get all positions in current template, bypass unsupported
* templates from some providers...
*
* @package JSN_Framework
* @since 1.0.3
*/
class JSNTemplateHelper
{
/**
* Current site template
*
* @var stdClass
*/
private $_template = '';
/**
* Template author
*
* @var string
*/
private $_author = 'default';
/**
* Constructor
*/
public function __construct()
{
try
{
/* get template assigned */
$this->_template = JSNTemplateModel::getDefaultTemplate();
/* get template mainfet*/
$client = JApplicationHelper::getClientInfo($this->_template->client_id);
@$this->_template->xml = new SimpleXMLElement($client->path . '/templates/' . $this->_template->element . '/templateDetails.xml', null, true);
/* get author template */
$author = JString::trim(JString::strtolower($this->_template->xml->author));
if ( ! $author)
{
$author = JString::trim(JString::strtolower($this->_template->xml->authorEmail));
if ($author)
{
@list($eName, $eHost) = explode('@', $author);
@list($this->_author, $dotCom) = explode('.', $author);
}
}
else
{
@list($this->_author, $dotCom) = explode('.', $author);
}
if (empty($this->_author))
{
$this->_author = 'default';
}
switch ($this->_author)
{
case 'joomagic':
// An template using T3 Framework
$this->_author = 'joomlart';
break;
}
}
catch (Exception $e)
{
throw new Exception(JText::_('JSN_EXTFW_NOTICE_SITE_TEMPLATE_NOT_SET'));
}
}
/**
* Return global JSNTemplate object
*
* @return object
*/
public static function getInstance()
{
static $instances;
if ( ! isset($instances))
{
$instances = array();
}
if (empty($instances['jsntemplatehelper']))
{
$instance = new JSNTemplateHelper;
$instances['jsntemplatehelper'] = &$instance;
}
return $instances['jsntemplatehelper'];
}
/**
* Get template author
*
* @return string
*/
public function getAuthor()
{
return $this->_author;
}
/**
* Load template position to javascript array
*
* @param boolean $loadparameter Whether to load parameter or not?
*
* @return string
*/
public function loadArrayJavascriptTemplatePositions($loadparameter = false)
{
if ($loadparameter)
{
$positions = $this->getTemplatePositions();
if (count($positions) == 0)
{
$positions = $this->loadXMLPositions();
}
$js_arr_positions[] = ' var positions = new Array(' . count($positions) . ');';
$js_arr_position_keys[] = 'var position_keys = new Array(' . count($positions) . ');';
for ($i = 0; $i < count($positions); $i++)
{
if (count($positions[$i]->params))
{
$params = '';
foreach ($positions[$i]->params AS $key => $val)
{
if ($params == '')
{
$params = $key . '=' . $val;
}
else
{
$params .= ',' . $key . '=' . $val;
}
}
}
else
{
$params = '';
}
$js_arr_positions[] = ' positions[\'' . trim(strtolower($positions[$i]->name)) . '\']= \'' . trim(strtolower($positions[$i]->name)) . '||' . $params . '\';';
$js_arr_position_keys[] = ' position_keys[\'' . $i . '\']= \'' . trim(strtolower($positions[$i]->name)) . '\';';
}
return implode(PHP_EOL, $js_arr_positions) . PHP_EOL . implode(PHP_EOL, $js_arr_position_keys);
}
$positions = $this->loadXMLPositions();
$js_arr_positions[] = ' var positions = new Array();';
for ($i = 0; $i < count($positions); $i++)
{
$js_arr_positions[] = ' positions[' . $i . ']= \'' . trim(strtolower($positions[$i]->name)) . '\';';
}
return implode(PHP_EOL, $js_arr_positions);
}
/**
* Method to load template positions
*
* @return array
*/
public function loadXMLPositions()
{
$specialProviders = array('joomlart');
if (in_array($this->_author, $specialProviders))
{
$positions = $this->loadOtherProviderPositions($this->_author);
}
else
{
$positions = array();
$hasPositions = array();
$xml_positions = $this->_template->xml->xpath('//positions/position');
foreach ($xml_positions AS $position)
{
$position = (string) $position;
if ( ! in_array($position, $hasPositions))
{
$_position = new stdClass;
$_position->name = $position;
$_position->params = array('style' => 'none');
array_push($hasPositions, $position);
array_push($positions, $_position);
}
}
}
// JArrayHelper::sortObjects($positions, 'name', 1, true);
return $positions;
}
/**
* Method to load other provider's template positions
*
* @param string $author Author
*
* @return string
*/
public function loadOtherProviderPositions($author)
{
$funcname = $author . 'PostionLoad';
if (method_exists($this, $funcname))
{
return $this->$funcname();
}
}
/**
* Method to load JA's template positions
*
* @return string
*/
protected function joomlartPostionLoad()
{
$positions = array();
$hasPositions = array();
$jat3CommonFile = JPATH_ROOT . '/plugins/system/jat3/jat3/core/common.php';
$templateName = $this->_template->element;
if (file_exists($jat3CommonFile))
{
jimport($jat3CommonFile);
$jat3_engine_layout_path = JPATH_ROOT . '/templates/' . $templateName . '/etc/layouts/default.xml';
$layout_info = T3Common::getXML($jat3_engine_layout_path);
if (is_file($jat3_engine_layout_path))
{
$layout_info = T3Common::getXML($jat3_engine_layout_path);
foreach ($layout_info['children'] AS $v)
{
if ($v['name'] == 'blocks')
{
foreach ($v['children'] AS $block)
{
if ( ! $block['data'])
{
$position = (string) $block['attributes']['name'];
if ( ! in_array($position, $hasPositions))
{
$_position = new stdClass;
$_position->name = $position;
$_position->params = array('style' => 'none');
array_push($hasPositions, $position);
array_push($positions, $_position);
}
}
else
{
$_l = explode(",", $block['data']);
foreach ($_l AS $position)
{
$_position = new stdClass;
$_position->name = $position;
$_position->params = array('style' => 'none');
array_push($hasPositions, $position);
array_push($positions, $_position);
}
}
}
}
}
}
}
if(empty($positions))
{
$positions = $this->T3Postion($templateName);
}
return $positions;
}
/**
* Method to get postion to template T3 framework
*
* @param string $templateName name template default
*
* @return array
*/
protected function T3Postion($templateName){
$positions = array();
$fileXml = JPath::clean(JPATH_SITE . '/templates/'.$templateName.'/templateDetails.xml');
if(is_file($fileXml))
{
$positions = $this->getPositionTemplate($fileXml);
}
return $positions;
}
/**
* Method to get postion to template joomshaper framework
*
* @param string $templateName name template default
*
* @return array
*/
protected function joomshaperPosition($templateName){
$positions = array();
$fileXml = JPath::clean(JPATH_SITE . '/templates/'.$templateName.'/templateDetails.xml');
if(is_file($fileXml))
{
$positions = $this->getPositionTemplate($fileXml);
}
return $positions;
}
/**
* Method to convert postion from file xml to array()
*
* @param string $fileXml path file template default Xlm
*
* @return array
*/
static function getPositionTemplate($fileXml){
$positions = array();
$hasPositions = array();
$layout_info = JSNTemplateHelper::getLayoutInfoXml($fileXml);
if (!empty($layout_info))
{
foreach ($layout_info AS $v)
{
$position = $v;
if ( ! in_array($position, $hasPositions))
{
$_position = new stdClass;
$_position->name = $position;
$_position->params = array('style' => 'none');
array_push($hasPositions, $position);
array_push($positions, $_position);
}
}
}
return $positions;
}
/**
* Method to get layout info to template other framework
*
* @param string $fileXml path file template default Xlm
*
* @return array
*/
static function getLayoutInfoXml($fileXml){
$positions = array();
if (is_file($fileXml)) {
// Read the file to see if it's a valid component XML file
$xml = simplexml_load_file($fileXml);
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;
}
/**
* Overwrite file modules loading of yootheme
*
* @return void
*/
protected function yootheme()
{
$client = JApplicationHelper::getClientInfo($this->_template->client_id);
$versionFolder = 'joomla.' . substr(JVERSION, 0, 3);
if (JVERSION >= 2.5)
{
$modules_file = $client->path . '/templates/' . $this->_template->element . '/warp/systems/joomla/layouts/modules.php';
$rename_path = $client->path . '/templates/' . $this->_template->element . '/warp/systems/joomla/layouts/modules.JSN.ORG.php';
}
else
{
$modules_file = $client->path . '/templates/' . $this->_template->element . '/warp/systems/' . $versionFolder . '/layouts/modules.php';
$rename_path = $client->path . '/templates/' . $this->_template->element . '/warp/systems/' . $versionFolder . '/layouts/modules.JSN.ORG.php';
}
if (file_exists($modules_file))
{
$contents = JFile::read($modules_file);
}
else
{
$contents = '';
}
if ( ! preg_match('/jsn-element-container_inner/i', $contents))
{
jimport('joomla.filesystem.file');
if ( ! file_exists($rename_path))
{
JFile::move($modules_file, $rename_path);
}
if (JVERSION >= 2.5)
{
JFile::copy(JSN_TEMPLATE_CLASSES_OVERWRITE . 'yootheme_modules_j25.php', $modules_file);
}
else
{
JFile::copy(JSN_TEMPLATE_CLASSES_OVERWRITE . 'yootheme_modules.php', $modules_file);
}
}
}
/**
* Overwrite index.php of T3 template
*
* @return void
*/
protected function joomlart()
{
$client = JApplicationHelper::getClientInfo($this->_template->client_id);
$index_file = $client->path . '/templates/' . $this->_template->element . '/index.php';
jimport('joomla.filesystem.file');
$contents = JFile::read($index_file);
if ( ! preg_match('/JSNT3Template/i', $contents))
{
JFile::move($index_file, $client->path . '/templates/' . $this->_template->element . '/index.JSN.ORG.php');
JFile::copy(JSN_TEMPLATE_CLASSES_OVERWRITE . 'joomlart.php', $index_file);
}
}
/**
* Helper JSNPOWERADMIN change joomlaxtc template
*
* @return void
*/
protected function joomlaxtc()
{
$client = JApplicationHelper::getClientInfo($this->_template->client_id);
$index_file = $client->path . '/templates/' . $this->_template->element . '/index.php';
jimport('joomla.filesystem.file');
$contents = JFile::read($index_file);
if ( ! preg_match('/JSNJoomlaXTCHelper/i', $contents))
{
JFile::move($index_file, $client->path . '/templates/' . $this->_template->element . '/index.JSN.ORG.php');
JFile::copy(JSN_TEMPLATE_CLASSES_OVERWRITE . 'joomlaxtc.php', $index_file);
}
}
/**
* Get information of positions in index.php of rockettheme template
*
* @return mixed
*/
protected function rockettheme()
{
$client = JApplicationHelper::getClientInfo($this->_template->client_id);
$index_file_path = $client->path . '/templates/' . $this->_template->element . '/index.php';
if (file_exists($index_file_path))
{
$file_contents = JFile::read($index_file_path);
if (preg_match_all('#displayModules(.*);#iU', $file_contents, $matches))
{
$positions = $this->loadXMLPositions();
$params = array();
$i = 0;
foreach ($matches[1] AS $matche)
{
$params[$i] = explode(',', $matche);
for ($j = 0; $j < count($params[$i]); $j++)
{
$params[$i][$j] = str_replace(array('(', "'", ')'), array('','',''), $params[$i][$j]);
}
$i++;
}
for ($i = 0; $i < count($positions); $i++)
{
$position = $positions[$i];
$positions[$i] = new stdClass;
$positions[$i]->name = $position->name[0];
$positions[$i]->params = array();
foreach ($params AS $param)
{
if (preg_match('/' . $param[0] . '/i', $positions[$i]->name))
{
$positions[$i]->params = array('style' => $param[1]);
break;
}
}
}
return $positions;
}
}
return null;
}
/**
* Get information of positions in index.php of gavickpro template
*
* @return mixed
*/
protected function gavickpro()
{
$client = JApplicationHelper::getClientInfo($this->_template->client_id);
$layout_settings = $client->path . '/templates/' . $this->_template->element . '/lib/framework/gk.const.php';
if ( ! file_exists($layout_settings))
{
return $this->defaultTemplate();
}
else
{
include $layout_settings;
$positions = array();
foreach ($GK_TEMPLATE_MODULE_STYLES AS $key => $value)
{
$position = new stdClass;
$position->name = $key;
$position->params = array('style' => $value);
$positions[] = $position;
}
return $positions;
}
}
/**
* Get information of positions index.php file
*
* @return array
*/
protected function defaultTemplate()
{
$client = JApplicationHelper::getClientInfo($this->_template->client_id);
$index_file_path = $client->path . '/templates/' . $this->_template->element . '/index.php';
if (file_exists($index_file_path))
{
$file_contents = JFile::read($index_file_path);
if (preg_match_all('#<jdoc:include\ type="([^"]+)" (.*)\/>#iU', $file_contents, $matches))
{
$positions = array();
$modules = $matches[2];
foreach ($modules AS $module)
{
if ($module != "")
{
$params = explode(' ', $module);
$position = new stdClass;
$position->name = str_replace(array('name="', '"'), array('', ''), $params[0]);
$position->params = array();
if (count($params) > 1)
{
for ($i = 1; $i < count($params); $i++)
{
if ($params[$i] != '')
{
$tmp = explode('=', $params[$i]);
if (count($tmp) > 1)
{
$position->params[$tmp[0]] = str_replace('"', '', $tmp[1]);
}
}
}
}
$positions[] = $position;
}
}
return $positions;
}
}
return null;
}
/**
* Get includes in template
*
* @return mixed
*/
public function getTemplatePositions()
{
switch ($this->_author)
{
case 'gavick':
return $this->gavickPro();
case 'joomshaper':
return $this->joomshaperPosition();
case 'rockettheme':
return $this->rockettheme();
case 'joomlajunkie':
case 'yootheme':
return;
case 'default':
default:
return $this->defaultTemplate();
}
}
}