tao-test/app/tao/helpers/Template.php

154 lines
4.8 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2014 (original work) Open Assessment Technologies SA;
*
*
*/
namespace oat\tao\helpers;
use oat\tao\model\theme\Theme;
use oat\oatbox\service\ServiceManager;
use oat\tao\model\asset\AssetService;
class Template
{
/**
* Expects a relative url to the image as path
* if extension name is omitted the current extension is used
*
* @param string $path
* @param string $extensionId
* @return string
*/
public static function img($path, $extensionId = null)
{
if (is_null($extensionId)) {
$extensionId = \Context::getInstance()->getExtensionName();
}
return self::getAssetService()->getAsset('img/' . $path, $extensionId);
}
/**
* Expects a relative url to the css as path
* if extension name is omitted the current extension is used
*
* @param string $path
* @param string $extensionId
* @return string
*/
public static function css($path, $extensionId = null)
{
if (is_null($extensionId)) {
$extensionId = \Context::getInstance()->getExtensionName();
}
return self::getAssetService()->getAsset('css/' . $path, $extensionId);
}
/**
* Expects a relative url to the java script as path
* if extension name is omitted the current extension is used
*
* @param string $path
* @param string $extensionId
* @return string
*/
public static function js($path, $extensionId = null)
{
if (is_null($extensionId)) {
$extensionId = \Context::getInstance()->getExtensionName();
}
return self::getAssetService()->getAsset('js/' . $path, $extensionId);
}
/**
* Expects a relative url to the template that is to be included as path
* if extension name is omitted the current extension is used
*
* @param string $path
* @param string $extensionId
* @param array $data bind additional data to the context
*/
public static function inc($path, $extensionId = null, $data = [])
{
$context = \Context::getInstance();
if ($extensionId !== null && $extensionId !== $context->getExtensionName()) {
// template is within different extension, change context
$formerContext = $context->getExtensionName();
$context->setExtensionName($extensionId);
}
if (!empty($data)) {
\RenderContext::pushContext($data);
}
$absPath = Layout::getThemeTemplate(Theme::CONTEXT_BACKOFFICE, $path) ?? self::getTemplate($path, $extensionId);
if (file_exists($absPath)) {
include($absPath);
} else {
\common_Logger::w('Failed to include "' . $absPath . '" in template');
}
// restore context
if (isset($formerContext)) {
$context->setExtensionName($formerContext);
}
}
/**
* @param $path
* @param null $extensionId
* @return string
*/
public static function getTemplate($path, $extensionId = null)
{
$extensionId = is_null($extensionId) ? \Context::getInstance()->getExtensionName() : $extensionId;
$ext = \common_ext_ExtensionsManager::singleton()->getExtensionById($extensionId);
return $ext->getConstant('DIR_VIEWS') . 'templates' . DIRECTORY_SEPARATOR . $path;
}
/**
* @FIXME get_data and has_data should be used exclusively inside templates (not namespaced)
* @return array|bool
*/
public static function getMessages()
{
$messages = [];
if (has_data('errorMessage')) {
$messages['error'] = get_data('errorMessage');
}
if (has_data('message')) {
$messages['info'] = get_data('message');
}
return !!count($messages) ? $messages : false;
}
/**
* @return AssetService
* @throws \common_Exception
* @throws \oat\oatbox\service\ServiceNotFoundException
*/
private static function getAssetService()
{
return ServiceManager::getServiceManager()->get(AssetService::SERVICE_ID);
}
}