<?php /** * @copyright Copyright (c) 2009-2022 Ryan Demmer. All rights reserved * @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * JCE is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses */ defined('JPATH_PLATFORM') or die; final class WFView extends JObject { private $path = array(); public function __construct($config = array()) { if (!array_key_exists('base_path', $config)) { $config['base_path'] = WF_EDITOR_LIBRARIES; } if (!array_key_exists('layout', $config)) { $config['layout'] = 'default'; } if (!array_key_exists('name', $config)) { $config['name'] = ''; } $this->setProperties($config); if (array_key_exists('template_path', $config)) { $this->addTemplatePath($config['template_path']); } else { $this->addTemplatePath($this->get('base_path') . '/views/' . $this->getName() . '/tmpl'); } } /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; * automatically searches through the template paths * * @throws object An JError object. * JView::display() * * @copyright Copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved * @license GNU/GPL, see LICENSE.php */ public function display($tpl = null) { $result = $this->loadTemplate($tpl); if ($result instanceof Exception) { return $result; } echo $result; } public function getName() { return $this->get('name'); } public function setLayout($layout) { $this->set('layout', $layout); } public function getLayout() { return $this->get('layout'); } public function addTemplatePath($path) { $this->path[] = $path; } public function getTemplatePath() { return $this->path; } /** * Load a template file. * * @param string $tpl The name of the template source file ... * automatically searches the template paths and compiles as needed * * @return string The output of the the template script. * * JView::loadTemplate() * * @copyright Copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved * @license GNU/GPL, see LICENSE.php */ public function loadTemplate($tpl = null) { // clear prior output $output = null; $template = null; //create the template file name based on the layout $file = isset($tpl) ? $this->getLayout() . '_' . $tpl : $this->getLayout(); // clean the file name $file = preg_replace('/[^A-Z0-9_\.-]/i', '', $file); if (isset($tpl)) { $tpl = preg_replace('/[^A-Z0-9_\.-]/i', '', $tpl); } // load the template script jimport('joomla.filesystem.path'); $path = $this->getTemplatePath(); $template = JPath::find($path, $file . '.php'); if ($template != false) { // unset so as not to introduce into template scope unset($tpl); unset($file); // never allow a 'this' property if (isset($this->this)) { unset($this->this); } // start capturing output into a buffer ob_start(); // include the requested template filename in the local scope // (this will execute the view logic). include $template; // done with the requested template; get the buffer and // clear it. $output = ob_get_contents(); ob_end_clean(); return $output; } else { throw new InvalidArgumentException('Layout "' . $file . '" not found in Paths ' . implode(', ', $path)); } } }