| Server IP : 85.158.181.41 / Your IP : 216.73.217.12 Web Server : Apache System : Linux cloud9-vm129 6.1.178+1-ph #ph SMP PREEMPT_DYNAMIC Wed Jul 29 09:00:54 UTC 2026 x86_64 User : moncbefd ( 1024) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/moncbefd/www.moneta.at/system/core/ |
Upload File : |
<?php
/* --------------------------------------------------------------
ContentView.inc.php 2017-11-27
Gambio GmbH
http://www.gambio.de
Copyright (c) 2017 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
class ContentView extends BaseClass implements ContentViewInterface
{
var $v_env_get_array = array();
var $v_env_post_array = array();
var $v_content_template = '';
var $content_array = array();
var $deprecated_array = array();
var $v_min_deprecation_level = 2; // TODO: rename in max_deprecation_level
var $v_flat_assigns = false;
var $v_coo_smarty = false;
var $v_cache_id_elements_array = array();
var $v_template_dir = '';
var $v_caching_enabled = false; # set in init_smarty()
var $v_compile_check_enabled = false; # set in init_smarty()
var $v_session_id_placeholder = '[#%_SESSION_ID_PLACEHOLDER_%#]';
protected $escape_html = false;
protected $build_html = true;
# var $v_caching_enabled = false;
# var $v_compile_check_enabled = true;
public function __construct($p_get_array = false, $p_post_array = false)
{
if($p_get_array)
{
$this->v_env_get_array = $p_get_array;
}
if($p_post_array)
{
$this->v_env_post_array = $p_post_array;
}
$this->deprecated_array[0] = array();
$this->deprecated_array[1] = array();
$this->deprecated_array[2] = array();
$this->set_validation_rules();
$this->set_deprecated_array();
}
function init_smarty()
{
if($this->v_coo_smarty === false)
{
$coo_template_control = MainFactory::create_object('TemplateControl', array(), true);
if($coo_template_control->get_template_presentation_version() < FIRST_GX2_TEMPLATE_VERSION)
{
# disable caching for old templates
$this->set_caching_enabled(false);
# activate compatibility mode for old templates
$this->set_flat_assigns(true);
}
if(is_object($GLOBALS['coo_debugger']) == true && $GLOBALS['coo_debugger']->is_enabled('smarty_compile_check') == true)
{
# overwrite only, if compile_check is enabled in debug_config
$this->set_compile_check_enabled(true);
$this->set_caching_enabled(false);
}
# create smarty
$this->v_coo_smarty = MainFactory::create('GXSmarty');
# cache settings
$this->v_coo_smarty->caching = $this->is_caching_enabled();
$this->v_coo_smarty->cache_lifetime = -1;
$this->v_coo_smarty->use_sub_dirs = false;
# compile settings
$this->v_coo_smarty->compile_check = $this->is_compile_check_enabled();
$this->v_coo_smarty->compile_dir = DIR_FS_CATALOG . StaticGXCoreLoader::getThemeControl()->getCompiledTemplatesFolder();
$this->v_coo_smarty->cache_dir = DIR_FS_CATALOG . 'cache/';
$this->v_coo_smarty->escape_html = $this->escape_html;
if($this->v_template_dir === '' && strpos($this->v_content_template, ':') === false)
{
# set only, if it's empty and template source is a file
$this->v_template_dir = DIR_FS_CATALOG . 'templates/' . CURRENT_TEMPLATE . '/';
}
$dataCache = DataCache::get_instance();
if($dataCache->key_exists('smarty_plugin_paths_' . CURRENT_TEMPLATE, true))
{
$pluginPaths = $dataCache->get_data('smarty_plugin_paths_' . CURRENT_TEMPLATE, true);
}
else
{
$pluginPaths = [];
$gxModuleFiles = GXModulesCache::getInstalledModuleFiles();
foreach($gxModuleFiles as $file)
{
$strpos = stripos($file, '/SmartyPlugins/');
if($strpos !== false)
{
$pluginPaths[] = substr($file, 0, $strpos + strlen('/SmartyPlugins'));
}
}
if(is_dir(DIR_FS_CATALOG . 'GXMainComponents/SmartyPlugins'))
{
$pluginPaths[] = DIR_FS_CATALOG . 'GXMainComponents/SmartyPlugins';
}
if(is_dir(DIR_FS_CATALOG . 'templates/' . CURRENT_TEMPLATE . '/smarty'))
{
$pluginPaths[] = DIR_FS_CATALOG . 'templates/' . CURRENT_TEMPLATE . '/smarty';
}
$pluginPaths = array_unique($pluginPaths);
$dataCache->set_data('smarty_plugin_paths_' . CURRENT_TEMPLATE, $pluginPaths, true);
}
$this->v_coo_smarty->addPluginsDir($pluginPaths);
# default elements for cache_id building
$t_cache_id_parameter_array = array(
$this->get_content_template(),
$_SESSION['language'],
$_SESSION['currency'],
$_SESSION['customers_status']['customers_status_id']
);
$this->add_cache_id_elements($t_cache_id_parameter_array);
# output settings
if(HTML_COMPRESSION == 'true')
{
$this->v_coo_smarty->loadFilter('output', 'trimwhitespace');
}
}
}
public function prepare_data()
{
// called at the beginning of get_html()
// e.g. can be used in overload to set additional content data for html-template
}
# should be overwritten by sub-classes
public function get_html()
{
$t_html_output = '';
$this->prepare_data();
if($this->build_html == true)
{
$t_html_output = $this->build_html();
}
return $t_html_output;
}
public function set_template_dir($p_dir_path)
{
if(strpos($p_dir_path, DIR_FS_CATALOG . 'admin/templates/') !== false)
{
throw new Exception('Use of admin/templates is deprecated, use admin/html/content instead');
}
$templateDirPath = realpath($p_dir_path).'/';
if(is_dir($templateDirPath) == false)
{
trigger_error('dir not found: ' . $templateDirPath, E_USER_WARNING);
return false;
}
$this->v_template_dir = $templateDirPath;
return true;
}
public function set_flat_assigns($p_status)
{
$this->v_flat_assigns = $p_status;
}
public function get_flat_assigns()
{
return $this->v_flat_assigns;
}
public function set_content_data($p_content_name, $p_content_item, $p_deprecation_level = 0)
{
$t_deprecation_level = (int)$p_deprecation_level;
if($t_deprecation_level != 0 && array_key_exists($t_deprecation_level, $this->deprecated_array) == false)
{
trigger_error('invalid p_deprecation_level: ' . $p_deprecation_level, E_USER_WARNING);
}
$this->content_array[$p_content_name] = $p_content_item;
$this->deprecated_array[$t_deprecation_level][] = $p_content_name;
}
public function get_content_array($p_max_deprecation_level = false)
{
$t_deprecated_array = $this->get_merged_deprecated_array();
foreach($t_deprecated_array as $t_value)
{
if(trim($t_value) == '')
{
continue;
}
$t_keys_array = explode('|', $t_value);
$this->search_deprecated_keys($t_keys_array, $this->content_array);
}
return $this->content_array;
}
protected function set_deprecated_array(){}
function search_deprecated_keys($p_key_array, &$p_array)
{
if(array_key_exists($p_key_array[0], $p_array))
{
$t_key = array_shift($p_key_array);
if(count($p_key_array) > 0)
{
$this->search_deprecated_keys($p_key_array, $p_array[$t_key]);
}
else
{
unset($p_array[$t_key]);
}
}
}
function get_merged_deprecated_array($p_max_deprecation_level = false)
{
$t_deprecated_array = array();
if($p_max_deprecation_level === false)
{
$t_max_level = $this->v_min_deprecation_level;
}
else
{
$t_max_level = $p_max_deprecation_level;
}
# merge all levels
foreach($this->deprecated_array as $t_key => $t_array)
{
if($t_key == 0 || $t_key > $t_max_level || is_array($t_array) == false)
{
continue;
}
$t_deprecated_array = array_merge($t_deprecated_array, $t_array);
}
return $t_deprecated_array;
}
public function set_content_template($p_filepath)
{
$this->v_content_template = $p_filepath;
}
/**
* Smarty can render templates from a string by using the string: or eval: resource.
*
* @param string $p_template
* @param bool $storeCompiledTemplate If set on "true", each unique template string will create a new compiled
* template file. If your template strings are accessed frequently, this is a
* good choice. If you have frequently changing template strings (or strings
* with low reuse value), "false" may be a better choice, as it doesn't save
* compiled templates to disk.
*/
public function set_content_template_from_string($p_template, $storeCompiledTemplate = true)
{
if($storeCompiledTemplate)
{
$this->v_content_template = 'string:' . $p_template;
}
else
{
$this->v_content_template = 'eval:' . $p_template;
}
}
public function get_content_template()
{
return $this->v_content_template;
}
function add_cache_id_elements($p_elements_array)
{
$this->v_cache_id_elements_array = array_merge($this->v_cache_id_elements_array, $p_elements_array);
}
function clear_cache_id_elements()
{
$this->v_cache_id_elements_array = array();
}
function get_cache_id()
{
$t_cache_id_parameter_array = $this->v_cache_id_elements_array;
# build cache_id
$t_cache_id = implode('_', $t_cache_id_parameter_array);
$t_cache_id = 'view_' . md5($t_cache_id);
return $t_cache_id;
}
function is_cached()
{
$this->init_smarty();
$t_template = $this->v_template_dir . $this->get_content_template();
$t_cache_id = $this->get_cache_id();
$t_cache_status = $this->v_coo_smarty->isCached($t_template, $t_cache_id);
if($t_cache_status == true)
{
$t_cache_status_log = 'TRUE';
}
else
{
$t_cache_status_log = 'FALSE';
}
if(is_object($GLOBALS['coo_debugger']))
{
$GLOBALS['coo_debugger']->log('cache_id:' . $t_cache_id . ' is_cached=' . $t_cache_status_log, 'SmartyCache');
}
return $t_cache_status;
}
public function build_html($p_content_data_array = false, $p_template_file = false)
{
$t_html_output = '';
$this->before_build_html();
$this->init_smarty();
# set using array and template
$t_content_data_array = $p_content_data_array;
$t_template_file = $p_template_file;
if($t_content_data_array === false)
{
$t_content_data_array = $this->get_content_array();
}
if($t_template_file === false)
{
$t_template_file = $this->get_content_template();
}
if($t_template_file == '')
{
trigger_error('t_template_file empty', E_USER_WARNING);
}
if($this->is_caching_enabled() == false || $this->is_cached() == false)
{
# assign module content
if($this->get_flat_assigns() == false)
{
$this->v_coo_smarty->assign('content_data', $t_content_data_array);
}
else
{
foreach($t_content_data_array as $t_data_key => $t_data_value)
{
$this->v_coo_smarty->assign($t_data_key, $t_data_value);
}
}
# assign global content
$this->v_coo_smarty->assign('session_id_placeholder', $this->get_session_id_placeholder());
$this->v_coo_smarty->assign('tpl_path', 'templates/' . CURRENT_TEMPLATE . '/');
$this->v_coo_smarty->assign('language', $_SESSION['language']);
$this->v_coo_smarty->assign('languages_id', $_SESSION['languages_id']);
$this->v_coo_smarty->assign('language_code', $_SESSION['language_code']);
$this->v_coo_smarty->assign('language_id', $_SESSION['languages_id']);
$this->v_coo_smarty->assign('page_url', htmlspecialchars_wrapper(gm_get_env_info('REQUEST_URI')));
if(StyleEditServiceFactory::service()->isEditing())
{
$this->v_coo_smarty->assign('style_edit_active', true);
}
# clear templates_c
//$coo_smarty->clear_compiled_tpl($t_full_template_path);
//$coo_smarty->clear_compiled_tpl();
}
# get html content
$t_full_template_path = $this->v_template_dir . $t_template_file;
if(strpos(':', $t_template_file) === false) // exclude templates from string
{
// LEGACY ABORT
// Throws an exception if the template file is supposed to be in the deprecated admin/templates directory
if(strpos($t_full_template_path, DIR_FS_CATALOG . 'admin/templates/') !== false)
{
throw new Exception('Use of admin/templates is deprecated, use admin/html/content instead');
}
}
$dataCache = DataCache::get_instance();
$extenderTemplateFiles = [];
$smartyFetchFiles = [];
// load extender templates from cache
if($dataCache->key_exists('smarty_fetch_files', true))
{
$smartyFetchFiles = $dataCache->get_data('smarty_fetch_files', true);
if(isset($smartyFetchFiles[$t_full_template_path]))
{
$extenderTemplateFiles = $smartyFetchFiles[$t_full_template_path];
}
}
// check for extender templates, if cache is not available
if(!isset($smartyFetchFiles[$t_full_template_path]))
{
$gxModulesFiles = GXModulesCache::getInstalledModuleFiles();
// frontend
if(stripos($t_full_template_path, DIR_FS_CATALOG . 'templates/') !== false)
{
foreach($gxModulesFiles as $file)
{
if(stripos($file, '/Templates/') === false)
{
continue;
}
$relativeFilePath = preg_replace('/.*\/Templates\/[^\/].+?\/(.*)/i', '$1', $file);
$fileTemlate = preg_replace('/.*\/Templates\/([^\/].+?)\/.*/i', '$1', $file);
if($t_full_template_path !== $file && strcasecmp($relativeFilePath, $t_template_file) === 0
&& (strcasecmp($fileTemlate, 'All') === 0
|| strcasecmp($fileTemlate, basename($this->v_template_dir)) === 0))
{
$extenderTemplateFiles[] = $file;
}
}
}
else // backend
{
foreach($gxModulesFiles as $file)
{
$relativeFilePath = preg_replace('/.*\/(Admin\/Html\/.*)/i', '$1', $file);
if($t_full_template_path !== $file && stripos($t_full_template_path, $relativeFilePath) !== false)
{
$extenderTemplateFiles[] = $file;
}
}
}
}
$fetchTemplatePath = $t_full_template_path;
if(strpos($t_template_file, ':') === false)
{
$smartyFetchFiles[$t_full_template_path] = $extenderTemplateFiles;
$dataCache->set_data('smarty_fetch_files', $smartyFetchFiles, true);
if(file_exists($t_full_template_path))
{
array_unshift($extenderTemplateFiles, $t_full_template_path);
}
$fetchTemplatePath = '';
if(count($extenderTemplateFiles) > 1)
{
$fetchTemplatePath = 'extends:';
}
elseif(!count($extenderTemplateFiles))
{
trigger_error('t_template_file does not exist: ' . $t_full_template_path, E_USER_ERROR);
}
$fetchTemplatePath .= implode('|', $extenderTemplateFiles);
}
$t_html_output = $this->v_coo_smarty->fetch($fetchTemplatePath, $this->get_cache_id());
# insert session_ids
$t_html_output = $this->replace_session_id_placeholder($t_html_output);
return $t_html_output;
}
function set_caching_enabled($p_status)
{
$this->v_caching_enabled = $p_status;
}
function is_caching_enabled()
{
return $this->v_caching_enabled;
}
function set_compile_check_enabled($p_status)
{
$this->v_compile_check_enabled = $p_status;
}
function is_compile_check_enabled()
{
return $this->v_compile_check_enabled;
}
function replace_session_id_placeholder($p_content)
{
$t_placeholder = $this->get_session_id_placeholder();
$t_session_id = xtc_session_id();
$t_output = str_replace($t_placeholder, $t_session_id, $p_content);
return $t_output;
}
function get_session_id_placeholder()
{
return $this->v_session_id_placeholder;
}
/**
* get the first template from folder
*
* this function gets the first template from the folder,
* if the given filepath not an file
*
* @param string $p_path Path to the templates
* @param string $p_template Name of the template
* @return string Template basname
*/
function get_default_template($p_filepath, $p_template)
{
// cast filepath to string
$t_filepath = (string)$p_filepath;
// get basename of the given template and cast to string
$t_template = basename((string)$p_template);
// get default template if given template not exists
if(!is_file($t_filepath . $p_template))
{
// get all html templates and select the first
$files = glob($t_filepath . '*.html');
$t_template = basename($files[0]);
// log if given template not exists and it is not the default
if($p_template != 'default' && $p_template != '')
{
$t_message = 'Template nicht vorhanden: "' . $t_filepath . $p_template . '"' . "\r\n";
$t_message .= 'Template verwendet: "' . $t_filepath . $t_template . '"';
$coo_log = LogControl::get_instance();
$coo_log->notice($t_message, 'error_handler', 'errors');
}
}
return $t_template;
}
function before_build_html()
{
// called at the beginning of build_html()
// e.g. can be used in overload to set additional content data for html-template
}
/**
* Set whether HTML must be escaped automatically.
*
* @link http://www.smarty.net/docs/en/variable.escape.html.tpl
*
* @param bool $value
*/
public function set_escape_html($value)
{
$this->escape_html = $value;
}
}