Files
luos/workflow/engine/skinEngine/skinEngine.php

899 lines
36 KiB
PHP
Raw Normal View History

<?php
/**
* Class SkinEngine
*
* This class load and dispatch the main systems layouts
2017-12-04 13:25:35 +00:00
*
* @author Erik Amaru Ortiz <erik@colosa.com>
* @author Hugo Loza
*/
2017-08-14 16:13:46 -04:00
use ProcessMaker\Core\System;
2017-08-01 12:16:06 -04:00
use ProcessMaker\Plugins\PluginRegistry;
define('SE_LAYOUT_NOT_FOUND', 6);
class SkinEngine
{
2017-09-12 15:16:07 -04:00
private $skinDefault = '';
private $layout = '';
private $template = '';
private $skin = '';
private $content = '';
private $mainSkin = '';
private $skinFiles = array();
private $forceTemplateCompile = true;
private $skinVariants = array();
private $skinsBasePath = array();
private $configurationFile = array();
private $layoutFile = array();
private $layoutFileBlank = array();
private $layoutFileExtjs = array();
private $layoutFileRaw = array();
private $layoutFileTracker = array();
private $layoutFileSubmenu = array();
private $cssFileName = '';
public function __construct($template, $skin, $content)
{
$this->template = $template;
$this->skin = $skin;
$this->content = $content;
$this->skinVariants = array('blank', 'extjs', 'raw', 'tracker', 'submenu');
$this->skinsBasePath = G::ExpandPath("skinEngine");
$sysConf = System::getSystemConfiguration(PATH_CONFIG . 'env.ini');
$this->skinDefault = (isset($sysConf['default_skin']) && $sysConf['default_skin'] != '') ? $sysConf['default_skin'] : 'classic';
$this->_init();
}
2017-09-12 15:16:07 -04:00
private function _init()
{
// setting default skin
if (!isset($this->skin) || $this->skin == "") {
$this->skin = $this->skinDefault;
}
2017-09-12 15:16:07 -04:00
// deprecated submenu type ""green-submenu"" now is mapped to "submenu"
if ($this->skin == "green-submenu") {
$this->skin = "submenu";
}
2017-09-12 15:16:07 -04:00
if (!in_array(strtolower($this->skin), $this->skinVariants)) {
$this->forceTemplateCompile = true; //Only save in session the main SKIN
2017-09-12 15:16:07 -04:00
if (isset($_SESSION['currentSkin']) && $_SESSION['currentSkin'] != $this->skin) {
$this->forceTemplateCompile = true;
}
$_SESSION['currentSkin'] = SYS_SKIN;
} else {
$_SESSION['currentSkin'] = SYS_SKIN;
$_SESSION['currentSkinVariant'] = $this->skin;
}
2017-09-12 15:16:07 -04:00
// setting default skin
if (!isset($_SESSION['currentSkin'])) {
$_SESSION['currentSkin'] = $this->skinDefault;
}
2017-09-12 15:16:07 -04:00
$this->mainSkin = $_SESSION['currentSkin'];
2017-09-12 15:16:07 -04:00
$skinObject = null;
2017-09-12 15:16:07 -04:00
//Set defaults "classic"
$configurationFile = $this->skinsBasePath . 'base' . PATH_SEP . 'config.xml';
$layoutFile = $this->skinsBasePath . 'base' . PATH_SEP . 'layout.html';
$layoutFileBlank = $this->skinsBasePath . 'base' . PATH_SEP . 'layout-blank.html';
$layoutFileExtjs = $this->skinsBasePath . 'base' . PATH_SEP . 'layout-extjs.html';
$layoutFileRaw = $this->skinsBasePath . 'base' . PATH_SEP . 'layout-raw.html';
$layoutFileTracker = $this->skinsBasePath . 'base' . PATH_SEP . 'layout-tracker.html';
$layoutFileSubmenu = $this->skinsBasePath . 'base' . PATH_SEP . 'layout-submenu.html';
//Based on requested Skin look if there is any registered with that name
if (strtolower($this->mainSkin) != "classic") {
if (defined('PATH_CUSTOM_SKINS') && is_dir(PATH_CUSTOM_SKINS . $this->mainSkin)) { // check this skin on user skins path
$skinObject = PATH_CUSTOM_SKINS . $this->mainSkin;
} else {
if (is_dir($this->skinsBasePath . $this->mainSkin)) { // check this skin on core skins path
$skinObject = $this->skinsBasePath . $this->mainSkin;
} else { //Skin doesn't exist
$this->mainSkin = $this->skinDefault;
if (defined('PATH_CUSTOM_SKINS') && is_dir(PATH_CUSTOM_SKINS . $this->mainSkin)) { // check this skin on user skins path
$skinObject = PATH_CUSTOM_SKINS . $this->mainSkin;
} else {
if (is_dir($this->skinsBasePath . $this->mainSkin)) { // check this skin on core skins path
$skinObject = $this->skinsBasePath . $this->mainSkin;
}
}
}
}
}
//This should have an XML definition and a layout html
if ($skinObject && file_exists($skinObject . PATH_SEP . 'config.xml')
&& file_exists($skinObject . PATH_SEP . 'layout.html')
) {
$configurationFile = $skinObject . PATH_SEP . 'config.xml';
$layoutFile = $skinObject . PATH_SEP . 'layout.html';
2017-09-12 15:16:07 -04:00
if (file_exists($skinObject . PATH_SEP . 'layout-blank.html')) {
$layoutFileBlank = $skinObject . PATH_SEP . 'layout-blank.html';
}
if (file_exists($skinObject . PATH_SEP . 'layout-extjs.html')) {
$layoutFileExtjs = $skinObject . PATH_SEP . 'layout-extjs.html';
}
if (file_exists($skinObject . PATH_SEP . 'layout-raw.html')) {
$layoutFileRaw = $skinObject . PATH_SEP . 'layout-raw.html';
}
if (file_exists($skinObject . PATH_SEP . 'layout-tracker.html')) {
$layoutFileTracker = $skinObject . PATH_SEP . 'layout-tracker.html';
}
if (file_exists($skinObject . PATH_SEP . 'layout-submenu.html')) {
$layoutFileSubmenu = $skinObject . PATH_SEP . 'layout-submenu.html';
}
}
2017-09-12 15:16:07 -04:00
$this->layoutFile = pathInfo($layoutFile);
$this->layoutFileBlank = pathInfo($layoutFileBlank);
$this->layoutFileExtjs = pathInfo($layoutFileExtjs);
$this->layoutFileTracker = pathInfo($layoutFileTracker);
$this->layoutFileRaw = pathInfo($layoutFileRaw);
$this->layoutFileSubmenu = pathInfo($layoutFileSubmenu);
2017-09-12 15:16:07 -04:00
$this->cssFileName = $this->mainSkin;
2017-09-12 15:16:07 -04:00
if ($this->skin != $this->mainSkin && in_array(strtolower($this->skin), $this->skinVariants)) {
$this->cssFileName .= "-" . $this->skin;
}
}
2017-09-12 15:16:07 -04:00
public function setLayout($layout)
{
$this->layout = $layout;
}
2017-09-12 15:16:07 -04:00
public function dispatch()
{
$skinMethod = '_' . strtolower($this->skin);
try {
if (!method_exists($this, $skinMethod)) {
$skinMethod = '_default';
}
$this->$skinMethod();
} catch (Exception $e) {
switch ($e->getCode()) {
case SE_LAYOUT_NOT_FOUND:
2017-09-12 15:16:07 -04:00
$data['exception_type'] = G::LoadTranslation('ID_SKIN_EXCEPTION');
$data['exception_title'] = G::LoadTranslation('ID_SKIN_LAYOUT_NOT_FOUND');
$data['exception_message'] = G::LoadTranslation('ID_SKIN_INCORRECT_VERIFY_URL');
$data['exception_list'] = array();
if (substr($this->mainSkin, 0, 2) != 'ux') {
$url = '../login/login';
} else {
$url = '../main/login';
}
2017-09-12 15:16:07 -04:00
$link = '<a href="' . $url . '">Try Now</a>';
2017-09-12 15:16:07 -04:00
$data['exception_notes'][] = G::LoadTranslation('ID_REDIRECT_URL') . $link;
2017-09-12 15:16:07 -04:00
G::renderTemplate(PATH_TPL . 'exception', $data);
break;
}
exit(0);
}
}
2017-09-12 15:16:07 -04:00
/**
* Skins Alternatives
*/
private function _raw()
{
G::verifyPath(PATH_SMARTY_C, true);
G::verifyPath(PATH_SMARTY_CACHE, true);
$smarty = new Smarty();
2017-12-04 13:25:35 +00:00
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
$smarty->template_dir = $this->layoutFileRaw['dirname'];
$smarty->compile_dir = PATH_SMARTY_C;
$smarty->cache_dir = PATH_SMARTY_CACHE;
$smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs';
if (isset($oHeadPublisher)) {
$header = $oHeadPublisher->printRawHeader();
}
$smarty->assign('header', $header);
$smarty->force_compile = $this->forceTemplateCompile;
$smarty->display($this->layoutFileRaw['basename']);
}
2017-09-12 15:16:07 -04:00
private function _plain()
{
2017-12-04 13:25:35 +00:00
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
echo $oHeadPublisher->renderExtJs();
}
2017-09-12 15:16:07 -04:00
private function _extjs()
{
2017-12-04 13:25:35 +00:00
$oServerConf = ServerConf::getSingleton();
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
if ($oHeadPublisher->extJsInit === true) {
$header = $oHeadPublisher->getExtJsVariablesScript();
$styles = $oHeadPublisher->getExtJsStylesheets($this->cssFileName);
$body = $oHeadPublisher->getExtJsScripts();
//default
$templateFile = G::ExpandPath("skinEngine") . 'base' . PATH_SEP . 'extJsInitLoad.html';
//Custom skins
if (defined('PATH_CUSTOM_SKINS') && is_dir(PATH_CUSTOM_SKINS . $this->mainSkin)) {
$templateFile = PATH_CUSTOM_SKINS . $this->mainSkin . PATH_SEP . 'extJsInitLoad.html';
}
//Skin uxs - simplified
if (!isset($_SESSION['user_experience'])) {
$_SESSION['user_experience'] = 'NORMAL';
}
if ($_SESSION['user_experience'] != 'NORMAL') {
$templateFile = (is_dir(PATH_CUSTOM_SKINS . 'uxs')) ? PATH_CUSTOM_SKINS . 'simplified' . PATH_SEP . 'extJsInitLoad.html' : $templateFile;
}
} else {
$styles = "";
$header = $oHeadPublisher->getExtJsStylesheets($this->cssFileName);
$header .= $oHeadPublisher->includeExtJs();
$body = $oHeadPublisher->renderExtJs();
2017-09-12 15:16:07 -04:00
$templateFile = $this->layoutFile['dirname'] . PATH_SEP . $this->layoutFileExtjs['basename'];
}
2017-09-12 15:16:07 -04:00
$template = new TemplatePower($templateFile);
$template->prepare();
2017-10-13 10:49:45 -04:00
$header = '<meta name="csrf-token" content="' . csrfToken() . '" />' . "\n" . $header;
2017-09-12 15:16:07 -04:00
$template->assign('header', $header);
$template->assign('styles', $styles);
$template->assign('bodyTemplate', $body);
2017-10-13 07:57:22 -04:00
$template->assign('csrf_token', csrfToken());
2017-09-12 15:16:07 -04:00
$doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
$meta = null;
$dirBody = null;
2017-12-04 13:25:35 +00:00
if (isset($_SERVER["HTTP_USER_AGENT"]) && preg_match(
"/^.*\(.*Trident.(\d+)\..+\).*$/",
$_SERVER["HTTP_USER_AGENT"],
$arrayMatch
)
2017-09-12 15:16:07 -04:00
) {
2017-09-12 15:16:07 -04:00
//Get the IE version
2017-12-04 13:25:35 +00:00
if (preg_match(
"/^.*\(.*MSIE (\d+)\..+\).*$/",
$_SERVER["HTTP_USER_AGENT"],
$arrayMatch
) || preg_match("/^.*\(.*rv.(\d+)\..+\).*$/", $_SERVER["HTTP_USER_AGENT"], $arrayMatch)
2017-09-12 15:16:07 -04:00
) {
$ie = intval($arrayMatch[1]);
}
$isIE = Bootstrap::isIE();
2017-09-12 15:16:07 -04:00
$swTrident = (preg_match("/^.*Trident.*$/", $_SERVER["HTTP_USER_AGENT"])) ? 1 : 0; //Trident only in IE8+
2017-09-12 15:16:07 -04:00
$sw = 1;
2017-09-12 15:16:07 -04:00
if ((($ie == 7 && $swTrident == 1) || $ie == 8) && !preg_match("/^ux.+$/", SYS_SKIN)) { //IE8
$sw = 0;
}
2017-09-12 15:16:07 -04:00
if ($sw == 1) {
if ($ie == 10 || $ie == 11) {
$ie = 8;
}
$doctype = null;
$meta = "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=$ie\" />";
if (SYS_COLLECTION == 'cases') {
if ($isIE) {
$meta = "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />";
}
}
}
}
2017-12-04 13:25:35 +00:00
$serverConf = ServerConf::getSingleton();
2017-09-12 15:16:07 -04:00
if ($serverConf->isRtl(SYS_LANG)) {
$dirBody = "dir=\"RTL\"";
}
2017-09-12 15:16:07 -04:00
$template->assign("doctype", $doctype);
2016-11-22 11:47:41 -05:00
2017-09-12 15:16:07 -04:00
if (defined('LOAD_HEADERS_IE') && LOAD_HEADERS_IE == 0) {
$template->assign('meta', $meta);
}
$template->assign("dirBody", $dirBody);
echo $template->getOutputContent();
2016-11-22 11:47:41 -05:00
}
2017-09-12 15:16:07 -04:00
private function _blank()
{
G::verifyPath(PATH_SMARTY_C, true);
G::verifyPath(PATH_SMARTY_CACHE, true);
2017-09-12 15:16:07 -04:00
$smarty = new Smarty();
2017-12-04 13:25:35 +00:00
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
$smarty->template_dir = $this->layoutFileBlank['dirname'];
$smarty->compile_dir = PATH_SMARTY_C;
$smarty->cache_dir = PATH_SMARTY_CACHE;
$smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs';
2017-09-12 15:16:07 -04:00
if (isset($oHeadPublisher)) {
$header = $oHeadPublisher->printHeader();
$header .= $oHeadPublisher->getExtJsStylesheets($this->cssFileName);
}
2017-09-12 15:16:07 -04:00
$smarty->assign('username',
2017-10-10 12:33:25 -04:00
(isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : ''));
2017-09-12 15:16:07 -04:00
$smarty->assign('header', $header);
$smarty->force_compile = $this->forceTemplateCompile;
2017-09-12 15:16:07 -04:00
// display
$smarty->display($this->layoutFileBlank['basename']);
}
2017-09-12 15:16:07 -04:00
private function _submenu()
{
global $G_ENABLE_BLANK_SKIN;
//menu
global $G_MAIN_MENU;
global $G_SUB_MENU;
global $G_MENU_SELECTED;
global $G_SUB_MENU_SELECTED;
global $G_ID_MENU_SELECTED;
global $G_ID_SUB_MENU_SELECTED;
G::verifyPath(PATH_SMARTY_C, true);
G::verifyPath(PATH_SMARTY_CACHE, true);
$smarty = new Smarty();
2017-12-04 13:25:35 +00:00
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
$smarty->template_dir = $this->layoutFileSubmenu['dirname'];
$smarty->compile_dir = PATH_SMARTY_C;
$smarty->cache_dir = PATH_SMARTY_CACHE;
$smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs';
if (isset($G_ENABLE_BLANK_SKIN) && $G_ENABLE_BLANK_SKIN) {
$smarty->display($layoutFileBlank['basename']);
} else {
2017-09-12 15:16:07 -04:00
$header = '';
if (isset($oHeadPublisher)) {
2017-10-10 12:33:25 -04:00
$oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : '';
2017-09-12 15:16:07 -04:00
$header = $oHeadPublisher->printHeader();
$header .= $oHeadPublisher->getExtJsStylesheets($this->cssFileName);
}
2017-09-12 15:16:07 -04:00
$footer = '';
2017-09-12 15:16:07 -04:00
if (strpos($_SERVER['REQUEST_URI'], '/login/login') !== false) {
$freeOfChargeText = "";
if (!defined('SKIP_FREE_OF_CHARGE_TEXT')) {
$freeOfChargeText = "Supplied free of charge with no support, certification, warranty, <br>maintenance nor indemnity by Processmaker and its Certified Partners.";
}
if (file_exists(PATH_CLASSES . "class.pmLicenseManager.php")) {
$freeOfChargeText = "";
}
2017-09-12 15:16:07 -04:00
$fileFooter = PATH_SKINS . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$fileFooter = PATH_SKIN_ENGINE . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$fileFooter = PATH_CUSTOM_SKINS . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$footer .= "$freeOfChargeText <br />Copyright &copy; 2000-" . date('Y') . " <a href=\"http://www.processmaker.com\" alt=\"ProcessMaker Inc.\" target=\"_blank\">ProcessMaker </a>Inc. All rights reserved.<br />" . "<br><br/><a href=\"http://www.processmaker.com\" alt=\"Powered by ProcessMaker - Open Source Workflow & Business Process Management (BPM) Management Software\" title=\"Powered by ProcessMaker\" target=\"_blank\"></a>";
}
}
}
}
2017-09-12 15:16:07 -04:00
$oMenu = new Menu();
2017-12-04 13:25:35 +00:00
$menus = $oMenu->generateArrayForTemplate(
$G_MAIN_MENU,
'SelectedMenu',
'mainMenu',
$G_MENU_SELECTED,
$G_ID_MENU_SELECTED
);
2017-09-12 15:16:07 -04:00
$smarty->assign('menus', $menus);
2017-09-12 15:16:07 -04:00
if (substr(SYS_SKIN, 0, 2) == 'ux') {
$smarty->assign('exit_editor', 1);
$smarty->assign('exit_editor_label', G::loadTranslation('ID_CLOSE_EDITOR'));
}
2017-09-12 15:16:07 -04:00
$oSubMenu = new Menu();
2017-12-04 13:25:35 +00:00
$subMenus = $oSubMenu->generateArrayForTemplate(
$G_SUB_MENU,
'selectedSubMenu',
'subMenu',
$G_SUB_MENU_SELECTED,
$G_ID_SUB_MENU_SELECTED
);
2017-09-12 15:16:07 -04:00
$smarty->assign('subMenus', $subMenus);
2017-09-12 15:16:07 -04:00
if (!defined('NO_DISPLAY_USERNAME')) {
define('NO_DISPLAY_USERNAME', 0);
}
if (NO_DISPLAY_USERNAME == 0) {
$smarty->assign('userfullname', isset($_SESSION['USR_FULLNAME']) ? $_SESSION['USR_FULLNAME'] : '');
$smarty->assign('user', isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ')' : '');
$smarty->assign('rolename', isset($_SESSION['USR_ROLENAME']) ? $_SESSION['USR_ROLENAME'] . '' : '');
$smarty->assign('pipe', isset($_SESSION['USR_USERNAME']) ? ' | ' : '');
$smarty->assign('logout', G::LoadTranslation('ID_LOGOUT'));
2017-10-10 12:33:25 -04:00
$smarty->assign('workspace', !empty(config("system.workspace")) ? config("system.workspace") : '');
2017-09-12 15:16:07 -04:00
$uws = (isset($_SESSION['USR_ROLENAME']) && $_SESSION['USR_ROLENAME'] != '') ? strtolower(G::LoadTranslation('ID_WORKSPACE_USING')) : G::LoadTranslation('ID_WORKSPACE_USING');
$smarty->assign('workspace_label', $uws);
$conf = new Configurations();
$conf->getFormats();
2017-12-04 13:25:35 +00:00
$name = $conf->userNameFormat(
isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME'] : '',
isset($_SESSION['USR_FULLNAME']) ? htmlentities(
$_SESSION['USR_FULLNAME'],
ENT_QUOTES,
'UTF-8'
) : '',
isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : ''
);
2017-09-12 15:16:07 -04:00
$smarty->assign('user', $name);
}
2017-10-10 12:33:25 -04:00
if (!empty(config("system.workspace"))) {
$logout = '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/login/login';
} else {
2017-09-12 15:16:07 -04:00
$logout = '/sys/' . SYS_LANG . '/' . SYS_SKIN . '/login/login';
}
2017-09-12 15:16:07 -04:00
$smarty->assign('linklogout', $logout);
$smarty->assign('header', $header);
$smarty->assign('footer', $footer);
$smarty->assign('tpl_menu', PATH_TEMPLATE . 'menu.html');
$smarty->assign('tpl_submenu', PATH_TEMPLATE . 'submenu.html');
if (class_exists('ProcessMaker\Plugins\PluginRegistry')) {
$oPluginRegistry = PluginRegistry::loadSingleton();
$sCompanyLogo = $oPluginRegistry->getCompanyLogo('/images/processmaker.logo.jpg');
} else {
$sCompanyLogo = '/images/processmaker.logo.jpg';
}
$smarty->assign('logo_company', $sCompanyLogo);
$smarty->display($this->layoutFileSubmenu['basename']);
}
}
2017-09-12 15:16:07 -04:00
private function _tracker()
{
global $G_ENABLE_BLANK_SKIN;
2017-09-12 15:16:07 -04:00
G::verifyPath(PATH_SMARTY_C, true);
G::verifyPath(PATH_SMARTY_CACHE, true);
2017-09-12 15:16:07 -04:00
$smarty = new Smarty();
2017-12-04 13:25:35 +00:00
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
$smarty->template_dir = PATH_SKINS;
$smarty->compile_dir = PATH_SMARTY_C;
$smarty->cache_dir = PATH_SMARTY_CACHE;
$smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs';
2017-09-12 15:16:07 -04:00
if (isset($G_ENABLE_BLANK_SKIN) && $G_ENABLE_BLANK_SKIN) {
$smarty->force_compile = $this->forceTemplateCompile;
$smarty->display($this->layoutFileBlank['basename']);
} else {
$header = '';
2017-09-12 15:16:07 -04:00
if (isset($oHeadPublisher)) {
2017-10-10 12:33:25 -04:00
$oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : '';
2017-09-12 15:16:07 -04:00
$header = $oHeadPublisher->printHeader();
}
2017-09-12 15:16:07 -04:00
$footer = '';
if (strpos($_SERVER['REQUEST_URI'], '/login/login') !== false) {
$fileFooter = PATH_SKINS . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$fileFooter = PATH_SKIN_ENGINE . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$fileFooter = PATH_CUSTOM_SKINS . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$footer .= "$freeOfChargeText <br />Copyright &copy; 2000-" . date('Y') . " <a href=\"http://www.processmaker.com\" alt=\"ProcessMaker Inc.\" target=\"_blank\">ProcessMaker </a>Inc. All rights reserved.<br /> " . "<br><br/><a href=\"http://www.processmaker.com\" alt=\"Powered by ProcessMaker - Open Source Workflow & Business Process Management (BPM) Management Software\" title=\"Powered by ProcessMaker\" target=\"_blank\"></a>";
}
}
}
}
2017-09-12 15:16:07 -04:00
//menu
global $G_MAIN_MENU;
global $G_SUB_MENU;
global $G_MENU_SELECTED;
global $G_SUB_MENU_SELECTED;
global $G_ID_MENU_SELECTED;
global $G_ID_SUB_MENU_SELECTED;
$oMenu = new Menu();
2017-12-04 13:25:35 +00:00
$menus = $oMenu->generateArrayForTemplate(
$G_MAIN_MENU,
'SelectedMenu',
'mainMenu',
$G_MENU_SELECTED,
$G_ID_MENU_SELECTED
);
2017-09-12 15:16:07 -04:00
$smarty->assign('menus', $menus);
$oSubMenu = new Menu();
2017-12-04 13:25:35 +00:00
$subMenus = $oSubMenu->generateArrayForTemplate(
$G_SUB_MENU,
'selectedSubMenu',
'subMenu',
$G_SUB_MENU_SELECTED,
$G_ID_SUB_MENU_SELECTED
);
2017-09-12 15:16:07 -04:00
$smarty->assign('subMenus', $subMenus);
$smarty->assign('user', isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME'] : '');
$smarty->assign('pipe', isset($_SESSION['USR_USERNAME']) ? ' | ' : '');
$smarty->assign('logout', G::LoadTranslation('ID_LOGOUT'));
$smarty->assign('header', $header);
$smarty->assign('tpl_menu', PATH_TEMPLATE . 'menu.html');
$smarty->assign('tpl_submenu', PATH_TEMPLATE . 'submenu.html');
if (class_exists('ProcessMaker\Plugins\PluginRegistry')) {
$oPluginRegistry = PluginRegistry::loadSingleton();
$sCompanyLogo = $oPluginRegistry->getCompanyLogo('/images/processmaker.logo.jpg');
} else {
$sCompanyLogo = '/images/processmaker.logo.jpg';
}
2017-09-12 15:16:07 -04:00
$smarty->assign('logo_company', $sCompanyLogo);
$smarty->force_compile = $this->forceTemplateCompile;
$smarty->display($this->layoutFileTracker['basename']);
}
}
2017-09-12 15:16:07 -04:00
private function _mvc()
{
2017-12-04 13:25:35 +00:00
$oServerConf = ServerConf::getSingleton();
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
$smarty = new Smarty();
2017-09-12 15:16:07 -04:00
$smarty->compile_dir = PATH_SMARTY_C;
$smarty->cache_dir = PATH_SMARTY_CACHE;
$smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs';
$smarty->register_function('translate', 'translate');
2017-10-13 07:57:22 -04:00
$smarty->register_function('csrf_token', 'csrfToken');
2017-09-12 15:16:07 -04:00
$viewVars = $oHeadPublisher->getVars();
2017-09-12 15:16:07 -04:00
// verify if is using extJs engine
if (count($oHeadPublisher->extJsScript) > 0) {
$header = $oHeadPublisher->getExtJsStylesheets($this->cssFileName . '-extJs');
$header .= $oHeadPublisher->includeExtJs();
2017-09-12 15:16:07 -04:00
$smarty->assign('_header', $header);
}
2017-09-12 15:16:07 -04:00
$contentFiles = $oHeadPublisher->getContent();
$viewFile = isset($contentFiles[0]) ? $contentFiles[0] : '';
2017-09-12 15:16:07 -04:00
if (empty($this->layout)) {
$smarty->template_dir = PATH_TPL;
$tpl = $viewFile . '.html';
} else {
$smarty->template_dir = $this->layoutFile['dirname'];
$tpl = 'layout-' . $this->layout . '.html';
//die($smarty->template_dir.PATH_SEP.$tpl);
if (!file_exists($smarty->template_dir . PATH_SEP . $tpl)) {
$e = new Exception("Layout $tpl does not exist!", SE_LAYOUT_NOT_FOUND);
$e->layoutFile = $smarty->template_dir . PATH_SEP . $tpl;
throw $e;
}
$smarty->assign('_content_file', $viewFile);
}
2017-09-12 15:16:07 -04:00
if (strpos($viewFile, '.') === false) {
$viewFile .= '.html';
}
2017-09-12 15:16:07 -04:00
foreach ($viewVars as $key => $value) {
$smarty->assign($key, $value);
}
2017-09-12 15:16:07 -04:00
if (defined('DEBUG') && DEBUG) {
$smarty->force_compile = true;
}
2017-09-12 15:16:07 -04:00
$smarty->assign('_skin', $this->mainSkin);
2017-09-12 15:16:07 -04:00
$smarty->display($tpl);
}
2017-09-12 15:16:07 -04:00
/**
* this Method prints the same _default() environment except javascript
*/
private function _minimal()
{
$enableJavascript = false;
2017-09-12 15:16:07 -04:00
$this->_default($enableJavascript);
}
2017-09-12 15:16:07 -04:00
private function _default($enableJsScript = true)
{
global $G_ENABLE_BLANK_SKIN;
//menu
global $G_PUBLISH;
global $G_MAIN_MENU;
global $G_SUB_MENU;
global $G_MENU_SELECTED;
global $G_SUB_MENU_SELECTED;
global $G_ID_MENU_SELECTED;
global $G_ID_SUB_MENU_SELECTED;
global $RBAC;
G::verifyPath(PATH_SMARTY_C, true);
G::verifyPath(PATH_SMARTY_CACHE, true);
$smarty = new Smarty();
2017-12-04 13:25:35 +00:00
$oHeadPublisher = headPublisher::getSingleton();
2017-09-12 15:16:07 -04:00
$smarty->compile_dir = PATH_SMARTY_C;
$smarty->cache_dir = PATH_SMARTY_CACHE;
$smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs';
//To setup en extJS Theme for this Skin
2017-12-04 13:25:35 +00:00
$oServerConf = ServerConf::getSingleton();
2017-09-12 15:16:07 -04:00
$extSkin = $oServerConf->getProperty("extSkin");
if (!$extSkin) {
$extSkin = [SYS_SKIN => "xtheme-gray"];
$oServerConf->setProperty("extSkin", $extSkin);
2017-12-04 13:25:35 +00:00
} elseif (empty($extSkin[SYS_SKIN])) {
2017-09-12 15:16:07 -04:00
$extSkin[SYS_SKIN] = "xtheme-gray";
$oServerConf->setProperty("extSkin", $extSkin);
}
2017-09-12 15:16:07 -04:00
//End of extJS Theme setup
2017-09-12 15:16:07 -04:00
if (isset($G_ENABLE_BLANK_SKIN) && $G_ENABLE_BLANK_SKIN) {
$smarty->template_dir = $this->layoutFileBlank['dirname'];
$smarty->force_compile = $this->forceTemplateCompile;
2017-09-12 15:16:07 -04:00
$smarty->display($layoutFileBlank['basename']);
} else {
$smarty->template_dir = $this->layoutFile['dirname'];
2017-09-12 15:16:07 -04:00
$meta = null;
$header = null;
2017-09-12 15:16:07 -04:00
if (preg_match("/^.*\(.*Trident.(\d+)\..+\).*$/", $_SERVER["HTTP_USER_AGENT"], $arrayMatch)) {
2017-09-12 15:16:07 -04:00
//Get the IE version
2017-12-04 13:25:35 +00:00
if (preg_match(
"/^.*\(.*MSIE (\d+)\..+\).*$/",
$_SERVER["HTTP_USER_AGENT"],
$arrayMatch
) || preg_match(
"/^.*\(.*rv.(\d+)\..+\).*$/",
$_SERVER["HTTP_USER_AGENT"],
$arrayMatch
)
2017-09-12 15:16:07 -04:00
) {
$ie = intval($arrayMatch[1]);
}
2016-11-22 11:47:41 -05:00
2017-09-12 15:16:07 -04:00
if ($ie == 10 || $ie == 11) {
$ie = 8;
2017-09-12 15:16:07 -04:00
$meta = "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=$ie\" />";
}
}
2017-09-12 15:16:07 -04:00
if (isset($oHeadPublisher)) {
2017-10-10 12:33:25 -04:00
if (!empty(config("system.workspace"))) {
$oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : '';
2017-09-12 15:16:07 -04:00
}
$header = $enableJsScript ? $oHeadPublisher->printHeader() : '';
$header .= $oHeadPublisher->getExtJsStylesheets($this->cssFileName);
}
2017-09-12 15:16:07 -04:00
if (defined('LOAD_HEADERS_IE') && LOAD_HEADERS_IE == 0) {
$smarty->assign('meta', $meta);
}
2017-09-12 15:16:07 -04:00
$smarty->assign("header", $header);
$footer = '';
if (strpos($_SERVER['REQUEST_URI'], '/login/login') !== false) {
$freeOfChargeText = "";
if (!defined('SKIP_FREE_OF_CHARGE_TEXT')) {
$freeOfChargeText = "Supplied free of charge with no support, certification, warranty, maintenance nor indemnity by ProcessMaker and its Certified Partners.";
}
if (file_exists(PATH_CLASSES . "PmLicenseManager.php")) {
$freeOfChargeText = "";
}
$fileFooter = PATH_SKINS . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$fileFooter = PATH_SKIN_ENGINE . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$fileFooter = PATH_CUSTOM_SKINS . SYS_SKIN . PATH_SEP . 'footer.html';
if (file_exists($fileFooter)) {
$footer .= file_get_contents($fileFooter);
} else {
$footer .= "$freeOfChargeText <br />Copyright &copy; 2000-" . date('Y') . " <a href=\"http://www.processmaker.com\" alt=\"ProcessMaker Inc.\" target=\"_blank\">ProcessMaker </a>Inc. All rights reserved.<br />" . "<br><br/><a href=\"http://www.processmaker.com\" alt=\"Powered by ProcessMaker - Open Source Workflow & Business Process Management (BPM) Management Software\" title=\"Powered by ProcessMaker\" target=\"_blank\"></a>";
}
}
}
}
2017-09-12 15:16:07 -04:00
$oMenu = new Menu();
2017-12-04 13:25:35 +00:00
$menus = $oMenu->generateArrayForTemplate(
$G_MAIN_MENU,
'SelectedMenu',
'mainMenu',
$G_MENU_SELECTED,
$G_ID_MENU_SELECTED
);
2017-09-12 15:16:07 -04:00
$smarty->assign('menus', $menus);
2017-09-12 15:16:07 -04:00
$oSubMenu = new Menu();
2017-12-04 13:25:35 +00:00
$subMenus = $oSubMenu->generateArrayForTemplate(
$G_SUB_MENU,
'selectedSubMenu',
'subMenu',
$G_SUB_MENU_SELECTED,
$G_ID_SUB_MENU_SELECTED
);
2017-09-12 15:16:07 -04:00
$smarty->assign('subMenus', $subMenus);
2017-09-12 15:16:07 -04:00
if (!defined('NO_DISPLAY_USERNAME')) {
define('NO_DISPLAY_USERNAME', 0);
}
if (NO_DISPLAY_USERNAME == 0) {
$switch_interface = isset($_SESSION['user_experience']) && $_SESSION['user_experience'] == 'SWITCHABLE';
$smarty->assign('user_logged', (isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : ''));
if (SYS_SKIN == 'neoclassic') {
2017-12-04 13:25:35 +00:00
$smarty->assign(
'tracker',
(SYS_COLLECTION == 'tracker') ? (($G_PUBLISH->Parts[0]['File'] != 'tracker/loginpm3') ? true : '') : ''
);
2017-09-12 15:16:07 -04:00
} else {
2017-12-04 13:25:35 +00:00
$smarty->assign(
'tracker',
(SYS_COLLECTION == 'tracker') ? (($G_PUBLISH->Parts[0]['File'] != 'tracker/login') ? true : '') : ''
);
2017-09-12 15:16:07 -04:00
}
2018-06-04 14:39:57 -04:00
$smarty->assign('timezone_status', (isset($_SESSION['__TIME_ZONE_FAILED__']) && $_SESSION['__TIME_ZONE_FAILED__']) ? 'failed' : 'ok');
2017-09-12 15:16:07 -04:00
$smarty->assign('switch_interface', $switch_interface);
$smarty->assign('switch_interface_label', G::LoadTranslation('ID_SWITCH_INTERFACE'));
$smarty->assign('rolename', isset($_SESSION['USR_ROLENAME']) ? $_SESSION['USR_ROLENAME'] . '' : '');
$smarty->assign('pipe', isset($_SESSION['USR_USERNAME']) ? ' | ' : '');
$smarty->assign('logout', G::LoadTranslation('ID_LOGOUT'));
2017-10-10 12:33:25 -04:00
$smarty->assign('workspace', !empty(config("system.workspace")) ? config("system.workspace") : '');
2017-09-12 15:16:07 -04:00
$uws = (isset($_SESSION['USR_ROLENAME']) && $_SESSION['USR_ROLENAME'] != '') ? strtolower(G::LoadTranslation('ID_WORKSPACE_USING')) : G::LoadTranslation('ID_WORKSPACE_USING');
$smarty->assign('workspace_label', $uws);
$conf = new Configurations();
$conf->getFormats();
2017-12-04 13:25:35 +00:00
$name = $conf->userNameFormat(
isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME'] : '',
isset($_SESSION['USR_FULLNAME']) ? htmlentities(
$_SESSION['USR_FULLNAME'],
ENT_QUOTES,
'UTF-8'
) : '',
isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : ''
);
2017-09-12 15:16:07 -04:00
$smarty->assign('user', $name);
}
2017-10-10 12:33:25 -04:00
if (!empty(config("system.workspace"))) {
2017-12-04 13:25:35 +00:00
$pmLicenseManagerO = PmLicenseManager::getSingleton();
2017-09-12 15:16:07 -04:00
$expireIn = $pmLicenseManagerO->getExpireIn();
$expireInLabel = $pmLicenseManagerO->getExpireInLabel();
if (!is_null($RBAC) &&
isset($RBAC->aUserInfo['PROCESSMAKER']['ROLE']['ROL_CODE']) &&
$RBAC->aUserInfo['PROCESSMAKER']['ROLE']['ROL_CODE'] == 'PROCESSMAKER_ADMIN'
) {
if ($expireInLabel != '') {
2017-12-04 13:25:35 +00:00
$smarty->assign(
'msgVer',
'<label class="textBlack">' . $expireInLabel . '</label>&nbsp;&nbsp;'
);
2017-09-12 15:16:07 -04:00
}
}
}
2017-10-10 12:33:25 -04:00
if (!empty(config("system.workspace"))) {
$logout = "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . ((SYS_COLLECTION != "tracker") ? "/login/login" : "/tracker/login");
2017-09-12 15:16:07 -04:00
} else {
$logout = '/sys/' . SYS_LANG . '/' . SYS_SKIN . '/login/login';
}
$smarty->assign('linklogout', $logout);
$smarty->assign('footer', $footer);
$smarty->assign('tpl_menu', PATH_TEMPLATE . 'menu.html');
$smarty->assign('tpl_submenu', PATH_TEMPLATE . 'submenu.html');
$oLogoR = new ReplacementLogo();
2017-10-10 12:33:25 -04:00
if (!empty(config("system.workspace"))) {
2017-09-12 15:16:07 -04:00
$aFotoSelect = $oLogoR->getNameLogo((isset($_SESSION['USER_LOGGED'])) ? $_SESSION['USER_LOGGED'] : '');
2017-09-12 15:16:07 -04:00
if (is_array($aFotoSelect)) {
$sFotoSelect = trim($aFotoSelect['DEFAULT_LOGO_NAME']);
$sWspaceSelect = trim($aFotoSelect['WORKSPACE_LOGO_NAME']);
}
}
2017-10-10 12:33:25 -04:00
if (class_exists('ProcessMaker\Plugins\PluginRegistry') && !empty(config("system.workspace"))) {
2017-09-12 15:16:07 -04:00
$oPluginRegistry = PluginRegistry::loadSingleton();
2017-12-04 13:25:35 +00:00
if (isset($sFotoSelect) && $sFotoSelect != '' && !(strcmp($sWspaceSelect,
config("system.workspace")))) {
2017-09-12 15:16:07 -04:00
$sCompanyLogo = $oPluginRegistry->getCompanyLogo($sFotoSelect);
2017-10-10 12:33:25 -04:00
$sCompanyLogo = "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/showLogoFile.php?id=" . base64_encode($sCompanyLogo);
2017-09-12 15:16:07 -04:00
} else {
$sCompanyLogo = $oPluginRegistry->getCompanyLogo('/images/processmaker.logo.jpg');
}
} else {
$sCompanyLogo = '/images/processmaker.logo.jpg';
}
$smarty->assign('logo_company', $sCompanyLogo);
$smarty->force_compile = $this->forceTemplateCompile;
$smarty->display($this->layoutFile['basename']);
}
}
}