<?php namespace Kanboard\Core; /** * Template * * @package core * @author Frederic Guillot * * @property \Kanboard\Helper\AppHelper $app * @property \Kanboard\Helper\AssetHelper $asset * @property \Kanboard\Helper\DateHelper $dt * @property \Kanboard\Helper\FileHelper $file * @property \Kanboard\Helper\FormHelper $form * @property \Kanboard\Helper\HookHelper $hook * @property \Kanboard\Helper\ModelHelper $model * @property \Kanboard\Helper\SubtaskHelper $subtask * @property \Kanboard\Helper\TaskHelper $task * @property \Kanboard\Helper\TextHelper $text * @property \Kanboard\Helper\UrlHelper $url * @property \Kanboard\Helper\UserHelper $user * @property \Kanboard\Helper\LayoutHelper $layout * @property \Kanboard\Helper\ProjectHeaderHelper $projectHeader */ class Template { /** * Helper object * * @access private * @var Helper */ private $helper; /** * List of template overrides * * @access private * @var array */ private $overrides = array(); /** * Template constructor * * @access public * @param Helper $helper */ public function __construct(Helper $helper) { $this->helper = $helper; } /** * Expose helpers with magic getter * * @access public * @param string $helper * @return mixed */ public function __get($helper) { return $this->helper->getHelper($helper); } /** * Render a template * * Example: * * $template->render('template_name', ['bla' => 'value']); * * @access public * @param string $__template_name Template name * @param array $__template_args Key/Value map of template variables * @return string */ public function render($__template_name, array $__template_args = array()) { extract($__template_args); ob_start(); include $this->getTemplateFile($__template_name); return ob_get_clean(); } /** * Define a new template override * * @access public * @param string $original_template * @param string $new_template */ public function setTemplateOverride($original_template, $new_template) { $this->overrides[$original_template] = $new_template; } /** * Find template filename * * Core template: 'task/show' or 'kanboard:task/show' * Plugin template: 'myplugin:task/show' * * @access public * @param string $template * @return string */ public function getTemplateFile($template) { $plugin = ''; $template = isset($this->overrides[$template]) ? $this->overrides[$template] : $template; if (strpos($template, ':') !== false) { list($plugin, $template) = explode(':', $template); } if ($plugin !== 'kanboard' && $plugin !== '') { return implode(DIRECTORY_SEPARATOR, array(PLUGINS_DIR, ucfirst($plugin), 'Template', $template.'.php')); } return implode(DIRECTORY_SEPARATOR, array(__DIR__, '..', 'Template', $template.'.php')); } }