2019-08-28 01:05:12 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Patch testing component for the Joomla! CMS
|
|
|
|
*
|
|
|
|
* @copyright Copyright (C) 2011 - 2012 Ian MacLennan, Copyright (C) 2013 - 2018 Open Source Matters, Inc. All rights reserved.
|
|
|
|
* @license GNU General Public License version 2 or later
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace PatchTester\View;
|
|
|
|
|
2019-08-28 01:20:49 +00:00
|
|
|
use Joomla\CMS\Filesystem\Path;
|
|
|
|
use Joomla\CMS\Language\Text;
|
2019-08-28 01:05:12 +00:00
|
|
|
use PatchTester\Model\AbstractModel;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Base HTML view for the patch testing component
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
abstract class AbstractHtmlView extends AbstractView
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* The view layout.
|
|
|
|
*
|
|
|
|
* @var string
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
protected $layout = 'default';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The paths queue.
|
|
|
|
*
|
|
|
|
* @var SplPriorityQueue
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
protected $paths;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to instantiate the view.
|
|
|
|
*
|
|
|
|
* @param AbstractModel $model The model object.
|
|
|
|
* @param SplPriorityQueue $paths The paths queue.
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
public function __construct(AbstractModel $model, \SplPriorityQueue $paths = null)
|
|
|
|
{
|
|
|
|
parent::__construct($model);
|
|
|
|
|
|
|
|
// Setup dependencies.
|
|
|
|
$this->paths = $paths ?: new \SplPriorityQueue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to escape output.
|
|
|
|
*
|
|
|
|
* @param string $output The output to escape.
|
|
|
|
*
|
|
|
|
* @return string The escaped output.
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
public function escape($output)
|
|
|
|
{
|
|
|
|
// Escape the output.
|
|
|
|
return htmlspecialchars($output, ENT_COMPAT, 'UTF-8');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to get the view layout.
|
|
|
|
*
|
|
|
|
* @return string The layout name.
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
public function getLayout()
|
|
|
|
{
|
|
|
|
return $this->layout;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to get the layout path.
|
|
|
|
*
|
|
|
|
* @param string $layout The layout name.
|
|
|
|
*
|
|
|
|
* @return mixed The layout file name if found, false otherwise.
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
public function getPath($layout)
|
|
|
|
{
|
|
|
|
// Get the layout file name.
|
2019-08-28 01:20:49 +00:00
|
|
|
$file = Path::clean($layout . '.php');
|
2019-08-28 01:05:12 +00:00
|
|
|
|
|
|
|
// Find the layout file path.
|
2019-08-28 01:20:49 +00:00
|
|
|
$path = Path::find(clone $this->paths, $file);
|
2019-08-28 01:05:12 +00:00
|
|
|
|
|
|
|
return $path;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to get the view paths.
|
|
|
|
*
|
|
|
|
* @return SplPriorityQueue The paths queue.
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
public function getPaths()
|
|
|
|
{
|
|
|
|
return $this->paths;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Load a template file -- first look in the templates folder for an override
|
|
|
|
*
|
|
|
|
* @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.
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
* @throws \RuntimeException
|
|
|
|
*/
|
|
|
|
public function loadTemplate($tpl = null)
|
|
|
|
{
|
|
|
|
// Get the path to the file
|
|
|
|
$file = $this->getLayout();
|
|
|
|
|
|
|
|
if (isset($tpl))
|
|
|
|
{
|
|
|
|
$file .= '_' . $tpl;
|
|
|
|
}
|
|
|
|
|
|
|
|
$path = $this->getPath($file);
|
|
|
|
|
|
|
|
if (!$path)
|
|
|
|
{
|
2019-08-28 01:20:49 +00:00
|
|
|
throw new \RuntimeException(Text::sprintf('JLIB_APPLICATION_ERROR_LAYOUTFILE_NOT_FOUND', $file), 500);
|
2019-08-28 01:05:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// 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 an output buffer.
|
|
|
|
ob_start();
|
|
|
|
|
|
|
|
// Load the template.
|
|
|
|
include $path;
|
|
|
|
|
|
|
|
// Get the layout contents.
|
|
|
|
return ob_get_clean();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to render the view.
|
|
|
|
*
|
|
|
|
* @return string The rendered view.
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
* @throws RuntimeException
|
|
|
|
*/
|
|
|
|
public function render()
|
|
|
|
{
|
|
|
|
// Get the layout path.
|
|
|
|
$path = $this->getPath($this->getLayout());
|
|
|
|
|
|
|
|
// Check if the layout path was found.
|
|
|
|
if (!$path)
|
|
|
|
{
|
|
|
|
throw new \RuntimeException('Layout Path Not Found');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Start an output buffer.
|
|
|
|
ob_start();
|
|
|
|
|
|
|
|
// Load the layout.
|
|
|
|
include $path;
|
|
|
|
|
|
|
|
// Get the layout contents.
|
|
|
|
$output = ob_get_clean();
|
|
|
|
|
|
|
|
return $output;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to set the view layout.
|
|
|
|
*
|
|
|
|
* @param string $layout The layout name.
|
|
|
|
*
|
|
|
|
* @return $this
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
public function setLayout($layout)
|
|
|
|
{
|
|
|
|
$this->layout = $layout;
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to set the view paths.
|
|
|
|
*
|
|
|
|
* @param \SplPriorityQueue $paths The paths queue.
|
|
|
|
*
|
|
|
|
* @return $this
|
|
|
|
*
|
2020-04-03 20:19:05 +00:00
|
|
|
* @since 4.0.0
|
2019-08-28 01:05:12 +00:00
|
|
|
*/
|
|
|
|
public function setPaths(\SplPriorityQueue $paths)
|
|
|
|
{
|
|
|
|
$this->paths = $paths;
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
}
|