mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 11:08:45 +02:00
Merge branch 'support/3.2' into develop
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -25,7 +26,7 @@ class AjaxPage extends WebPage implements iTabbedPage
|
||||
*/
|
||||
protected $m_oTabs;
|
||||
|
||||
const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/ajaxpage/layout';
|
||||
public const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/ajaxpage/layout';
|
||||
/** @var string */
|
||||
private $sPromiseId;
|
||||
|
||||
@@ -41,7 +42,7 @@ class AjaxPage extends WebPage implements iTabbedPage
|
||||
* @param string $s_title Not used
|
||||
* @param bool $bOutputExtraResources if true will output also JS & CSS resources
|
||||
*/
|
||||
function __construct($s_title)
|
||||
public function __construct($s_title)
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
$sPrintable = utils::ReadParam('printable', '0');
|
||||
@@ -288,7 +289,7 @@ class AjaxPage extends WebPage implements iTabbedPage
|
||||
|
||||
if (!empty($sCurrentTabContainer) && !empty($sCurrentTab)) {
|
||||
$iOffset = $this->m_oTabs->GetCurrentTabLength();
|
||||
return array('tc' => $sCurrentTabContainer, 'tab' => $sCurrentTab, 'offset' => $iOffset);
|
||||
return ['tc' => $sCurrentTabContainer, 'tab' => $sCurrentTab, 'offset' => $iOffset];
|
||||
} else {
|
||||
return parent::start_capture();
|
||||
}
|
||||
@@ -335,6 +336,6 @@ class AjaxPage extends WebPage implements iTabbedPage
|
||||
*/
|
||||
public static function FilterXSS($sHTML)
|
||||
{
|
||||
return str_ireplace(array('<script', '</script>'), array('<!-- <removed-script', '</removed-script> -->'), $sHTML);
|
||||
return str_ireplace(['<script', '</script>'], ['<!-- <removed-script', '</removed-script> -->'], $sHTML);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -8,7 +9,7 @@ namespace Combodo\iTop\Application\WebPage;
|
||||
|
||||
class CLILikeWebPage extends WebPage
|
||||
{
|
||||
const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/clilikewebpage/layout';
|
||||
public const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/clilikewebpage/layout';
|
||||
public function add_comment($sText)
|
||||
{
|
||||
$this->add('#'.$sText."<br/>\n");
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
|
||||
// Copyright (C) 2010-2024 Combodo SAS
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
@@ -22,33 +23,32 @@ use DBSearch;
|
||||
use ExecutionKPI;
|
||||
|
||||
/**
|
||||
* CLI page
|
||||
* CLI page
|
||||
* The page adds the content-type text/XML and the encoding into the headers
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
|
||||
class CLIPage implements Page
|
||||
{
|
||||
/** @var string */
|
||||
public $s_title;
|
||||
|
||||
function __construct($s_title)
|
||||
{
|
||||
$this->s_title = $s_title;
|
||||
}
|
||||
public function __construct($s_title)
|
||||
{
|
||||
$this->s_title = $s_title;
|
||||
}
|
||||
|
||||
public function output()
|
||||
{
|
||||
if (class_exists('DBSearch')) {
|
||||
DBSearch::RecordQueryTrace();
|
||||
}
|
||||
if (class_exists('ExecutionKPI')) {
|
||||
ExecutionKPI::ReportStats();
|
||||
}
|
||||
}
|
||||
public function output()
|
||||
{
|
||||
if (class_exists('DBSearch')) {
|
||||
DBSearch::RecordQueryTrace();
|
||||
}
|
||||
if (class_exists('ExecutionKPI')) {
|
||||
ExecutionKPI::ReportStats();
|
||||
}
|
||||
}
|
||||
|
||||
public function add($sText)
|
||||
{
|
||||
@@ -70,27 +70,21 @@ class CLIPage implements Page
|
||||
echo "#".$sText."\n";
|
||||
}
|
||||
|
||||
public function table($aConfig, $aData, $aParams = array())
|
||||
public function table($aConfig, $aData, $aParams = [])
|
||||
{
|
||||
$aCells = array();
|
||||
foreach($aConfig as $sName=>$aDef)
|
||||
{
|
||||
if (strlen($aDef['description']) > 0)
|
||||
{
|
||||
$aCells = [];
|
||||
foreach ($aConfig as $sName => $aDef) {
|
||||
if (strlen($aDef['description']) > 0) {
|
||||
$aCells[] = $aDef['label'].' ('.$aDef['description'].')';
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
$aCells[] = $aDef['label'];
|
||||
}
|
||||
}
|
||||
echo implode(';', $aCells)."\n";
|
||||
|
||||
foreach($aData as $aRow)
|
||||
{
|
||||
$aCells = array();
|
||||
foreach($aConfig as $sName=>$aAttribs)
|
||||
{
|
||||
foreach ($aData as $aRow) {
|
||||
$aCells = [];
|
||||
foreach ($aConfig as $sName => $aAttribs) {
|
||||
$sValue = $aRow["$sName"];
|
||||
$aCells[] = $sValue;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
|
||||
// Copyright (C) 2010-2024 Combodo SAS
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
@@ -29,40 +30,39 @@ use ExecutionKPI;
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
|
||||
class CSVPage extends WebPage
|
||||
{
|
||||
function __construct($s_title)
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
parent::__construct($s_title);
|
||||
$this->add_header("Content-type: text/plain; charset=".self::PAGES_CHARSET);
|
||||
$this->no_cache();
|
||||
$this->add_http_headers();
|
||||
//$this->add_header("Content-Transfer-Encoding: binary");
|
||||
$oKpi->ComputeStats(get_class($this).' creation', 'CSVPage');
|
||||
}
|
||||
public function __construct($s_title)
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
parent::__construct($s_title);
|
||||
$this->add_header("Content-type: text/plain; charset=".self::PAGES_CHARSET);
|
||||
$this->no_cache();
|
||||
$this->add_http_headers();
|
||||
//$this->add_header("Content-Transfer-Encoding: binary");
|
||||
$oKpi->ComputeStats(get_class($this).' creation', 'CSVPage');
|
||||
}
|
||||
|
||||
public function output()
|
||||
{
|
||||
$this->add_header("Content-Length: ".strlen(trim($this->s_content)));
|
||||
public function output()
|
||||
{
|
||||
$this->add_header("Content-Length: ".strlen(trim($this->s_content)));
|
||||
|
||||
// Get the unexpected output but do nothing with it
|
||||
$sTrash = $this->ob_get_clean_safe();
|
||||
// Get the unexpected output but do nothing with it
|
||||
$sTrash = $this->ob_get_clean_safe();
|
||||
|
||||
$oKpi = new ExecutionKPI();
|
||||
foreach ($this->a_headers as $s_header) {
|
||||
header($s_header);
|
||||
}
|
||||
echo trim($this->s_content);
|
||||
echo "\n";
|
||||
$oKpi->ComputeAndReport('Echoing ('.round(strlen($this->s_content) / 1024).' Kb)');
|
||||
$oKpi = new ExecutionKPI();
|
||||
foreach ($this->a_headers as $s_header) {
|
||||
header($s_header);
|
||||
}
|
||||
echo trim($this->s_content);
|
||||
echo "\n";
|
||||
$oKpi->ComputeAndReport('Echoing ('.round(strlen($this->s_content) / 1024).' Kb)');
|
||||
|
||||
if (class_exists('DBSearch')) {
|
||||
DBSearch::RecordQueryTrace();
|
||||
}
|
||||
ExecutionKPI::ReportStats();
|
||||
}
|
||||
if (class_exists('DBSearch')) {
|
||||
DBSearch::RecordQueryTrace();
|
||||
}
|
||||
ExecutionKPI::ReportStats();
|
||||
}
|
||||
|
||||
public function small_p($sText)
|
||||
{
|
||||
@@ -81,29 +81,23 @@ class CSVPage extends WebPage
|
||||
public function add_comment($sText)
|
||||
{
|
||||
$this->s_content .= "#".$sText."\n";
|
||||
}
|
||||
}
|
||||
|
||||
public function table($aConfig, $aData, $aParams = array())
|
||||
public function table($aConfig, $aData, $aParams = [])
|
||||
{
|
||||
$aCells = array();
|
||||
foreach($aConfig as $sName=>$aDef)
|
||||
{
|
||||
if (strlen($aDef['description']) > 0)
|
||||
{
|
||||
$aCells = [];
|
||||
foreach ($aConfig as $sName => $aDef) {
|
||||
if (strlen($aDef['description']) > 0) {
|
||||
$aCells[] = $aDef['label'].' ('.$aDef['description'].')';
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
$aCells[] = $aDef['label'];
|
||||
}
|
||||
}
|
||||
$this->s_content .= implode(';', $aCells)."\n";
|
||||
|
||||
foreach($aData as $aRow)
|
||||
{
|
||||
$aCells = array();
|
||||
foreach($aConfig as $sName=>$aAttribs)
|
||||
{
|
||||
foreach ($aData as $aRow) {
|
||||
$aCells = [];
|
||||
foreach ($aConfig as $sName => $aAttribs) {
|
||||
$sValue = $aRow["$sName"];
|
||||
$aCells[] = $sValue;
|
||||
}
|
||||
@@ -111,4 +105,3 @@ class CSVPage extends WebPage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
|
||||
// Copyright (C) 2024 Combodo SAS
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
@@ -30,10 +31,9 @@ use ExecutionKPI;
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
|
||||
class CaptureWebPage extends WebPage
|
||||
{
|
||||
function __construct()
|
||||
public function __construct()
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
parent::__construct('capture web page');
|
||||
@@ -51,8 +51,7 @@ class CaptureWebPage extends WebPage
|
||||
public function GetJS()
|
||||
{
|
||||
$sRet = implode("\n", $this->a_scripts);
|
||||
if (!empty($this->s_deferred_content))
|
||||
{
|
||||
if (!empty($this->s_deferred_content)) {
|
||||
$sRet .= "\n\$('body').append('".addslashes(str_replace("\n", '', $this->s_deferred_content))."');";
|
||||
}
|
||||
|
||||
@@ -93,4 +92,3 @@ class CaptureWebPage extends WebPage
|
||||
throw new Exception(__method__.' should not be called');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
|
||||
@@ -16,7 +16,6 @@ use utils;
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @since 2.7.1 N°2641 class creation
|
||||
*/
|
||||
@@ -55,10 +54,9 @@ class ErrorPage extends NiceWebPage
|
||||
public function error($sText)
|
||||
{
|
||||
$this->add("<div class=\"message message-error\">$sText</div>");
|
||||
if(utils::IsEasterEggAllowed())
|
||||
{
|
||||
if (utils::IsEasterEggAllowed()) {
|
||||
$this->add('<div class="message message-valid">'.Dict::S('UI:ErrorPage:UnstableVersion').'</div>');
|
||||
$this->add('<img src="' . utils::GetAbsoluteUrlAppRoot() . 'images/alpha-fatal-error.gif">');
|
||||
$this->add('<img src="'.utils::GetAbsoluteUrlAppRoot().'images/alpha-fatal-error.gif">');
|
||||
$this->add('<div class="message message-valid">'.nl2br(Dict::S('UI:ErrorPage:KittyDisclaimer')).'</div>');
|
||||
}
|
||||
$this->log_error($sText);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -73,6 +74,6 @@ class JsonPPage extends JsonPage
|
||||
{
|
||||
$sContent = parent::ComputeContent();
|
||||
|
||||
return $this->sCallbackName . '(' . $sContent . ');';
|
||||
return $this->sCallbackName.'('.$sContent.');';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -89,7 +90,7 @@ class JsonPage extends WebPage
|
||||
*/
|
||||
protected function OutputHeaders(): void
|
||||
{
|
||||
$this->add_header('Content-type: ' . $this->sContentType);
|
||||
$this->add_header('Content-type: '.$this->sContentType);
|
||||
|
||||
foreach ($this->a_headers as $s_header) {
|
||||
header($s_header);
|
||||
@@ -126,4 +127,4 @@ class JsonPage extends WebPage
|
||||
$oKpi->ComputeAndReport('Echoing ('.round(strlen($sContent) / 1024).' Kb)');
|
||||
ExecutionKPI::ReportStats();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (C) 2013-2024 Combodo SAS
|
||||
*
|
||||
@@ -22,7 +23,6 @@ namespace Combodo\iTop\Application\WebPage;
|
||||
use Combodo\iTop\Renderer\BlockRenderer;
|
||||
use ExecutionKPI;
|
||||
|
||||
|
||||
/**
|
||||
* Special class of WebPage for printing into a PDF document
|
||||
*/
|
||||
@@ -35,7 +35,7 @@ class PDFPage extends WebPage
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
parent::__construct($s_title);
|
||||
if (!defined('K_PATH_FONTS')){
|
||||
if (!defined('K_PATH_FONTS')) {
|
||||
define('K_PATH_FONTS', APPROOT.'lib/combodo/tcpdf/fonts/');
|
||||
}
|
||||
$this->oPdf = new iTopPDF($sPageOrientation, 'mm', $sPageFormat, true, self::PAGES_CHARSET, false);
|
||||
@@ -152,12 +152,10 @@ EOF
|
||||
public function output()
|
||||
{
|
||||
$this->add_header('Content-type: application/x-pdf');
|
||||
if (!empty($this->sContentDisposition))
|
||||
{
|
||||
if (!empty($this->sContentDisposition)) {
|
||||
$this->add_header('Content-Disposition: '.$this->sContentDisposition.'; filename="'.$this->sContentFileName.'"');
|
||||
}
|
||||
foreach ($this->a_headers as $s_header)
|
||||
{
|
||||
foreach ($this->a_headers as $s_header) {
|
||||
header($s_header);
|
||||
}
|
||||
$this->flush();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -64,5 +65,5 @@ interface Page
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function table($aConfig, $aData, $aParams = array());
|
||||
public function table($aConfig, $aData, $aParams = []);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -12,16 +13,15 @@ use Combodo\iTop\Application\UI\Base\Layout\TabContainer\TabContainer;
|
||||
use DeprecatedCallsLog;
|
||||
use Dict;
|
||||
|
||||
|
||||
/**
|
||||
* Helper class to implement JQueryUI tabs inside a page
|
||||
*/
|
||||
class TabManager
|
||||
{
|
||||
const ENUM_TAB_TYPE_HTML = 'html';
|
||||
const ENUM_TAB_TYPE_AJAX = 'ajax';
|
||||
public const ENUM_TAB_TYPE_HTML = 'html';
|
||||
public const ENUM_TAB_TYPE_AJAX = 'ajax';
|
||||
|
||||
const DEFAULT_TAB_TYPE = self::ENUM_TAB_TYPE_HTML;
|
||||
public const DEFAULT_TAB_TYPE = self::ENUM_TAB_TYPE_HTML;
|
||||
|
||||
/**
|
||||
* @var TabContainer[]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (C) 2013-2024 Combodo SAS
|
||||
*
|
||||
@@ -37,7 +38,7 @@ use utils;
|
||||
*/
|
||||
class UnauthenticatedWebPage extends NiceWebPage
|
||||
{
|
||||
const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/unauthenticatedwebpage/layout';
|
||||
public const DEFAULT_PAGE_TEMPLATE_REL_PATH = 'pages/backoffice/unauthenticatedwebpage/layout';
|
||||
private $sContent;
|
||||
private $sPanelTitle;
|
||||
private $sPanelIcon;
|
||||
@@ -77,17 +78,17 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
$this->SetContentType('text/html');
|
||||
|
||||
// - bootstrap
|
||||
$this->LinkScriptFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL . 'lib/bootstrap/js/bootstrap.min.js');
|
||||
$this->LinkScriptFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL.'lib/bootstrap/js/bootstrap.min.js');
|
||||
|
||||
// Note: Since 2.6.0 moment was moved from portal to iTop core
|
||||
$this->LinkScriptFromAppRoot('node_modules/moment/min/moment-with-locales.min.js');
|
||||
|
||||
$this->LinkScriptFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL . 'lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js');
|
||||
$this->LinkScriptFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL.'lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js');
|
||||
|
||||
// CSS files
|
||||
$this->LinkStylesheetFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL . 'lib/bootstrap/css/bootstrap.min.css');
|
||||
$this->add_saas(UAWP_PORTAL_PUBLIC_FOLDER_RELATIVE_PATH . 'css/bootstrap-theme-combodo.scss');
|
||||
$this->LinkStylesheetFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL . 'lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css');
|
||||
$this->LinkStylesheetFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL.'lib/bootstrap/css/bootstrap.min.css');
|
||||
$this->add_saas(UAWP_PORTAL_PUBLIC_FOLDER_RELATIVE_PATH.'css/bootstrap-theme-combodo.scss');
|
||||
$this->LinkStylesheetFromURI(UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL.'lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css');
|
||||
|
||||
// Default theme
|
||||
$this->add_saas('css/unauthenticated.scss');
|
||||
@@ -102,24 +103,22 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
*/
|
||||
private function Init(): void
|
||||
{
|
||||
$this->sPortalBaseFolderRelPath = 'env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/';
|
||||
$this->sPortalSourcesFolderRelPath = $this->sPortalBaseFolderRelPath . 'src/';
|
||||
$this->sPortalPublicFolderRelPath = $this->sPortalBaseFolderRelPath . 'public/';
|
||||
$this->sPortalBaseFolderRelPath = 'env-'.utils::GetCurrentEnvironment().'/itop-portal-base/portal/';
|
||||
$this->sPortalSourcesFolderRelPath = $this->sPortalBaseFolderRelPath.'src/';
|
||||
$this->sPortalPublicFolderRelPath = $this->sPortalBaseFolderRelPath.'public/';
|
||||
|
||||
$this->sPortalBaseFolderAbsPath = APPROOT . $this->sPortalBaseFolderRelPath;
|
||||
$this->sPortalSourcesFolderAbsPath = APPROOT . $this->sPortalSourcesFolderRelPath;
|
||||
$this->sPortalPublicFolderAbsPath = APPROOT . $this->sPortalPublicFolderRelPath;
|
||||
$this->sPortalBaseFolderAbsPath = APPROOT.$this->sPortalBaseFolderRelPath;
|
||||
$this->sPortalSourcesFolderAbsPath = APPROOT.$this->sPortalSourcesFolderRelPath;
|
||||
$this->sPortalPublicFolderAbsPath = APPROOT.$this->sPortalPublicFolderRelPath;
|
||||
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
$this->sPortalPublicFolderAbsUrl = utils::GetAbsoluteUrlModulesRoot().'/itop-portal-base/portal/public/';
|
||||
|
||||
// Constants to be used in the UnauthenticatedWebPage
|
||||
if(!defined('UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL'))
|
||||
{
|
||||
if (!defined('UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL')) {
|
||||
define('UAWP_PORTAL_PUBLIC_FOLDER_ABSOLUTE_URL', $this->sPortalPublicFolderAbsUrl);
|
||||
}
|
||||
if(!defined('UAWP_PORTAL_PUBLIC_FOLDER_RELATIVE_PATH'))
|
||||
{
|
||||
if (!defined('UAWP_PORTAL_PUBLIC_FOLDER_RELATIVE_PATH')) {
|
||||
define('UAWP_PORTAL_PUBLIC_FOLDER_RELATIVE_PATH', $this->sPortalPublicFolderRelPath);
|
||||
}
|
||||
}
|
||||
@@ -131,7 +130,7 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
{
|
||||
$this->sContent .= $sHtml;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
@@ -179,7 +178,7 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
'sDeferredContent' => utils::FilterXSS($this->s_deferred_content),
|
||||
'sContent' => $this->sContent,
|
||||
'sPanelIcon' => $this->sPanelIcon,
|
||||
'sPanelTitle' => $this->sPanelTitle
|
||||
'sPanelTitle' => $this->sPanelTitle,
|
||||
];
|
||||
|
||||
$aData['aBlockParams'] = $this->GetBlockParams();
|
||||
@@ -196,7 +195,7 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
$aData['aPage']['sFaviconUrl'] = $this->GetFaviconAbsoluteUrl();
|
||||
|
||||
$oTwigEnv = TwigHelper::GetTwigEnvironment(BlockRenderer::TWIG_BASE_PATH, BlockRenderer::TWIG_ADDITIONAL_PATHS);
|
||||
|
||||
|
||||
// Render final TWIG into global HTML
|
||||
$sHtml = TwigHelper::RenderTemplate($oTwigEnv, $aData, $this->GetTemplateRelPath());
|
||||
$oKpi->ComputeAndReport(get_class($this).' output');
|
||||
@@ -204,7 +203,7 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
$oKpi->ComputeAndReport('Echoing ('.round(strlen($sHtml) / 1024).' Kb)');
|
||||
ExecutionKPI::ReportStats();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Displays a success message.
|
||||
*
|
||||
@@ -271,7 +270,6 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @throws \Exception
|
||||
@@ -282,8 +280,7 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
// Default theme
|
||||
$this->add_saas('css/unauthenticated.scss');
|
||||
// Custom theme to allow admin to override the default one.
|
||||
if(!empty($this->sCustomThemeUrl))
|
||||
{
|
||||
if (!empty($this->sCustomThemeUrl)) {
|
||||
$this->LinkStylesheetFromURI($this->sCustomThemeUrl);
|
||||
}
|
||||
}
|
||||
@@ -296,4 +293,4 @@ class UnauthenticatedWebPage extends NiceWebPage
|
||||
{
|
||||
return Branding::GetLoginFavIconAbsoluteUrl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
|
||||
// Copyright (C) 2010-2024 Combodo SAS
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
@@ -28,7 +29,6 @@ use ExecutionKPI;
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Simple web page with no includes or fancy formatting, useful to generateXML documents
|
||||
* The page adds the content-type text/XML and the encoding into the headers
|
||||
@@ -38,10 +38,10 @@ class XMLPage extends WebPage
|
||||
/**
|
||||
* For big XML files, it's better NOT to store everything in memory and output the XML piece by piece
|
||||
*/
|
||||
var $m_bPassThrough;
|
||||
var $m_bHeaderSent;
|
||||
|
||||
function __construct($s_title, $bPassThrough = false)
|
||||
public $m_bPassThrough;
|
||||
public $m_bHeaderSent;
|
||||
|
||||
public function __construct($s_title, $bPassThrough = false)
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
parent::__construct($s_title);
|
||||
@@ -65,8 +65,7 @@ class XMLPage extends WebPage
|
||||
}
|
||||
public function output()
|
||||
{
|
||||
if (!$this->m_bPassThrough)
|
||||
{
|
||||
if (!$this->m_bPassThrough) {
|
||||
$oKpi = new ExecutionKPI();
|
||||
|
||||
// Get the unexpected output but do nothing with it
|
||||
@@ -75,8 +74,7 @@ class XMLPage extends WebPage
|
||||
$sCharset = self::PAGES_CHARSET;
|
||||
$this->s_content = "<?xml version=\"1.0\" encoding=\"$sCharset\"?".">\n".trim($this->s_content);
|
||||
$this->add_header("Content-Length: ".strlen($this->s_content));
|
||||
foreach($this->a_headers as $s_header)
|
||||
{
|
||||
foreach ($this->a_headers as $s_header) {
|
||||
header($s_header);
|
||||
}
|
||||
$oKpi->ComputeAndReport(get_class($this).' output');
|
||||
@@ -96,12 +94,9 @@ class XMLPage extends WebPage
|
||||
} else {
|
||||
if ($this->m_bHeaderSent) {
|
||||
echo $sText;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
$s_captured_output = $this->ob_get_clean_safe();
|
||||
foreach($this->a_headers as $s_header)
|
||||
{
|
||||
foreach ($this->a_headers as $s_header) {
|
||||
header($s_header);
|
||||
}
|
||||
$sCharset = self::PAGES_CHARSET;
|
||||
@@ -118,7 +113,7 @@ class XMLPage extends WebPage
|
||||
{
|
||||
}
|
||||
|
||||
public function table($aConfig, $aData, $aParams = array())
|
||||
public function table($aConfig, $aData, $aParams = [])
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -12,7 +13,6 @@ use TCPDF;
|
||||
use TCPDF_IMAGES;
|
||||
use utils;
|
||||
|
||||
|
||||
/**
|
||||
* Custom class derived from TCPDF for providing custom headers and footers
|
||||
*
|
||||
@@ -65,11 +65,14 @@ class iTopPDF extends TCPDF
|
||||
}*/
|
||||
$imgtype = TCPDF_IMAGES::getImageFileType($sImagePath);
|
||||
if (($imgtype == 'eps') or ($imgtype == 'ai')) {
|
||||
$this->ImageEps($sImagePath, $x, $y, $w, $h);;
|
||||
$this->ImageEps($sImagePath, $x, $y, $w, $h);
|
||||
;
|
||||
} elseif ($imgtype == 'svg') {
|
||||
$this->ImageSVG($sImagePath, $x, $y, $w, $h);;
|
||||
$this->ImageSVG($sImagePath, $x, $y, $w, $h);
|
||||
;
|
||||
} else {
|
||||
$this->Image($sImagePath, $x, $y, $w, $h);;
|
||||
$this->Image($sImagePath, $x, $y, $w, $h);
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,14 +92,44 @@ class iTopPDF extends TCPDF
|
||||
|
||||
// Display the title (centered)
|
||||
$this->SetXY($aMargins['left'] + $iPageNumberWidth, 0);
|
||||
$this->MultiCell($this->getPageWidth() - $aMargins['left'] - $aMargins['right'] - 2 * $iPageNumberWidth, 15, $this->sDocumentTitle,
|
||||
0, 'C', false, 0 /* $ln */, '', '', true, 0, false, true, 15, 'M' /* $valign */);
|
||||
$this->MultiCell(
|
||||
$this->getPageWidth() - $aMargins['left'] - $aMargins['right'] - 2 * $iPageNumberWidth,
|
||||
15,
|
||||
$this->sDocumentTitle,
|
||||
0,
|
||||
'C',
|
||||
false,
|
||||
0 /* $ln */,
|
||||
'',
|
||||
'',
|
||||
true,
|
||||
0,
|
||||
false,
|
||||
true,
|
||||
15,
|
||||
'M' /* $valign */
|
||||
);
|
||||
$this->SetFontParams('', 10);
|
||||
|
||||
// Display the page number (right aligned)
|
||||
// Warning: the 'R'ight alignment does not work when using placeholders like $this->getAliasNumPage() or $this->getAliasNbPages()
|
||||
$this->MultiCell($iPageNumberWidth, 15, Dict::Format('Core:BulkExport:PDF:PageNumber', $this->page), 0, 'R', false, 0 /* $ln */, '',
|
||||
'', true, 0, false, true, 15, 'M' /* $valign */);
|
||||
$this->MultiCell(
|
||||
$iPageNumberWidth,
|
||||
15,
|
||||
Dict::Format('Core:BulkExport:PDF:PageNumber', $this->page),
|
||||
0,
|
||||
'R',
|
||||
false,
|
||||
0 /* $ln */,
|
||||
'',
|
||||
'',
|
||||
true,
|
||||
0,
|
||||
false,
|
||||
true,
|
||||
15,
|
||||
'M' /* $valign */
|
||||
);
|
||||
|
||||
// Branding logo
|
||||
$sBrandingIcon = Branding::GetLogoRelativePath(Branding::ENUM_LOGO_TYPE_MAIN_LOGO_FULL);
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
|
||||
// Copyright (C) 2010-2024 Combodo SAS
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
@@ -33,29 +34,28 @@ use utils;
|
||||
*/
|
||||
class iTopWizardWebPage extends iTopWebPage
|
||||
{
|
||||
var $m_iCurrentStep;
|
||||
var $m_aSteps;
|
||||
public function __construct($sTitle, $currentOrganization, $iCurrentStep, $aSteps)
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
parent::__construct($sTitle." - step $iCurrentStep of ".count($aSteps)." - ".$aSteps[$iCurrentStep - 1], $currentOrganization);
|
||||
public $m_iCurrentStep;
|
||||
public $m_aSteps;
|
||||
public function __construct($sTitle, $currentOrganization, $iCurrentStep, $aSteps)
|
||||
{
|
||||
$oKpi = new ExecutionKPI();
|
||||
parent::__construct($sTitle." - step $iCurrentStep of ".count($aSteps)." - ".$aSteps[$iCurrentStep - 1], $currentOrganization);
|
||||
$this->m_iCurrentStep = $iCurrentStep;
|
||||
$this->m_aSteps = $aSteps;
|
||||
$oKpi->ComputeStats(get_class($this).' creation', 'iTopWizardWebPage');
|
||||
}
|
||||
|
||||
public function output()
|
||||
{
|
||||
$aSteps = array();
|
||||
$iIndex = 0;
|
||||
foreach($this->m_aSteps as $sStepTitle)
|
||||
{
|
||||
$iIndex++;
|
||||
$sStyle = ($iIndex == $this->m_iCurrentStep) ? 'wizActiveStep' : 'wizStep';
|
||||
$aSteps[] = "<div class=\"$sStyle\"><span>$sStepTitle</span></div>";
|
||||
}
|
||||
$sWizardHeader = "<div class=\"wizHeader\"><h1>".utils::EscapeHtml($this->s_title)."</h1>\n".implode("<div class=\"wizSeparator\"><img align=\"bottom\" src=\"" . utils::GetAbsoluteUrlAppRoot() . "images/wizArrow.gif\"></div>", $aSteps)."<br style=\"clear:both;\"/></div>\n";
|
||||
$this->s_content = "$sWizardHeader<div class=\"wizContainer\">".$this->s_content."</div>";
|
||||
parent::output();
|
||||
$this->m_aSteps = $aSteps;
|
||||
$oKpi->ComputeStats(get_class($this).' creation', 'iTopWizardWebPage');
|
||||
}
|
||||
|
||||
public function output()
|
||||
{
|
||||
$aSteps = [];
|
||||
$iIndex = 0;
|
||||
foreach ($this->m_aSteps as $sStepTitle) {
|
||||
$iIndex++;
|
||||
$sStyle = ($iIndex == $this->m_iCurrentStep) ? 'wizActiveStep' : 'wizStep';
|
||||
$aSteps[] = "<div class=\"$sStyle\"><span>$sStepTitle</span></div>";
|
||||
}
|
||||
$sWizardHeader = "<div class=\"wizHeader\"><h1>".utils::EscapeHtml($this->s_title)."</h1>\n".implode("<div class=\"wizSeparator\"><img align=\"bottom\" src=\"".utils::GetAbsoluteUrlAppRoot()."images/wizArrow.gif\"></div>", $aSteps)."<br style=\"clear:both;\"/></div>\n";
|
||||
$this->s_content = "$sWizardHeader<div class=\"wizContainer\">".$this->s_content."</div>";
|
||||
parent::output();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user