154 lines
4.8 KiB
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);
|
||
|
}
|
||
|
}
|