diff --git a/datamodels/2.x/itop-portal-base/index.php b/datamodels/2.x/itop-portal-base/index.php index bf10e26dd1..1a7b397f22 100644 --- a/datamodels/2.x/itop-portal-base/index.php +++ b/datamodels/2.x/itop-portal-base/index.php @@ -22,45 +22,16 @@ * This allows to make a portal directly from the ITSM Designer. */ +// Load current environment if (file_exists(__DIR__ . '/../../approot.inc.php')) { - require_once __DIR__ . '/../../approot.inc.php'; // When in env-xxxx folder + require_once __DIR__ . '/../../approot.inc.php'; // When in env-xxxx folder } else { - require_once __DIR__ . '/../../../approot.inc.php'; // When in datamodels/x.x folder + require_once __DIR__ . '/../../../approot.inc.php'; // When in datamodels/x.x folder } -require_once APPROOT . '/application/startup.inc.php'; +require_once APPROOT . 'application/startup.inc.php'; -// If PORTAL_ID is not already defined, we look for it in a parameter -if(!defined('PORTAL_ID')) -{ - // Retrieving portal id from request params - $sPortalId = utils::ReadParam('portal_id', ''); - if ($sPortalId == '') - { - echo "Missing argument 'portal_id'"; - exit; - } - - // Defining portal constants - define('PORTAL_ID', $sPortalId); -} - -// Set debug mode only when necessary -if (utils::ReadParam('debug', 'false') === 'true') -{ - $_SERVER['APP_DEBUG'] = true; -} - -define('PORTAL_CACHE_PATH', utils::GetCachePath() . '/portals/' . PORTAL_ID . '/'); - -// Constants to be used in templates and others -define('COMBODO_CURRENT_ENVIRONMENT', utils::GetCurrentEnvironment()); -define('COMBODO_ABSOLUTE_URL', utils::GetAbsoluteUrlAppRoot()); -define('COMBODO_MODULES_ABSOLUTE_URL', utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment()); -define('COMBODO_PORTAL_BASE_ABSOLUTE_URL', utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/public/'); -define('COMBODO_PORTAL_BASE_ABSOLUTE_PATH', MODULESROOT . '/itop-portal-base/portal/public/'); -define('COMBODO_PORTAL_INSTANCE_ABSOLUTE_URL', utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/' . PORTAL_ID . '/'); - -require_once APPROOT . '/env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/public/index.php'; +// Load frontal +require_once MODULESROOT . 'itop-portal-base/portal/public/index.php'; diff --git a/datamodels/2.x/itop-portal-base/portal/bin/console b/datamodels/2.x/itop-portal-base/portal/bin/console index 19c2f6c3cc..970d8646c6 100644 --- a/datamodels/2.x/itop-portal-base/portal/bin/console +++ b/datamodels/2.x/itop-portal-base/portal/bin/console @@ -1,10 +1,9 @@ #!/usr/bin/env php $sArg) +{ + if (preg_match('/^--portal_id=(.*)$/', $sArg, $aMatches)) + { + unset($aCleanedArgv[$iArg]); + break; + } +} + +$input = new ArgvInput($aCleanedArgv); if (null !== $env = $input->getParameterOption(['--env', '-e'], null, true)) { putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); } @@ -27,15 +49,7 @@ if ($input->hasParameterOption('--no-debug', true)) { putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); } -require dirname(__DIR__).'/config/bootstrap.php'; - -if ($_SERVER['APP_DEBUG']) { - umask(0000); - - if (class_exists(Debug::class)) { - Debug::enable(); - } -} +require_once MODULESROOT . 'itop-portal-base/portal/config/bootstrap.php'; $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); $application = new Application($kernel); diff --git a/datamodels/2.x/itop-portal-base/portal/composer.json b/datamodels/2.x/itop-portal-base/portal/composer.json index dc2879e281..77001c6a87 100644 --- a/datamodels/2.x/itop-portal-base/portal/composer.json +++ b/datamodels/2.x/itop-portal-base/portal/composer.json @@ -27,7 +27,8 @@ "Combodo\\iTop\\Portal\\": "src/" }, "classmap": [ - "../../../../core" + "../../../../core", + "../../../../application" ] }, "autoload-dev": { diff --git a/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php b/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php index 72bfb0f1e2..51b4fd34ac 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php +++ b/datamodels/2.x/itop-portal-base/portal/config/bootstrap.php @@ -1,8 +1,23 @@ =1.2) @@ -45,7 +60,56 @@ if (is_array($env = @include dirname(__DIR__).'/.env.local.php')) { } } +// Set debug mode only when necessary +if (utils::ReadParam('debug', 'false') === 'true') +{ + $_SERVER['APP_DEBUG'] = true; +} + $_SERVER += $_ENV; $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = (isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null)) ?: 'prod'; $_SERVER['APP_DEBUG'] = isset($_SERVER['APP_DEBUG']) ? $_SERVER['APP_DEBUG'] : (isset($_ENV['APP_DEBUG']) ? $_ENV['APP_DEBUG'] : ('prod' !== $_SERVER['APP_ENV'])); $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; + +if ($_SERVER['APP_DEBUG']) { + umask(0000); + + if (class_exists(Debug::class)) { + Debug::enable(); + } +} + +// If PORTAL_ID is not already defined, we look for it in a parameter +if(!defined('PORTAL_ID')) +{ + // Retrieving portal id from request params + $sPortalId = utils::ReadParam('portal_id', '', true); + if ($sPortalId == '') + { + echo "Missing argument 'portal_id'"; + exit; + } + + // Defining portal constants + define('PORTAL_ID', $sPortalId); +} +else +{ + @trigger_error( + sprintf( + 'Usage of legacy "PORTAL_ID" constant ("%s") is deprecated. You should pass "portal_id" in the URL as GET parameter.', + PORTAL_ID + ), + E_USER_DEPRECATED + ); +} + +define('PORTAL_CACHE_PATH', utils::GetCachePath() . '/portals/' . PORTAL_ID . '/'); + +// Constants to be used in templates and others +define('COMBODO_CURRENT_ENVIRONMENT', utils::GetCurrentEnvironment()); +define('COMBODO_ABSOLUTE_URL', utils::GetAbsoluteUrlAppRoot()); +define('COMBODO_MODULES_ABSOLUTE_URL', utils::GetAbsoluteUrlModulesRoot()); +define('COMBODO_PORTAL_BASE_ABSOLUTE_URL', utils::GetAbsoluteUrlModulesRoot() . 'itop-portal-base/portal/public/'); +define('COMBODO_PORTAL_BASE_ABSOLUTE_PATH', MODULESROOT . '/itop-portal-base/portal/public/'); +define('COMBODO_PORTAL_INSTANCE_ABSOLUTE_URL', utils::GetAbsoluteUrlModulesRoot() . PORTAL_ID . '/'); \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/public/index.php b/datamodels/2.x/itop-portal-base/portal/public/index.php index f694c1001a..508f83ff77 100644 --- a/datamodels/2.x/itop-portal-base/portal/public/index.php +++ b/datamodels/2.x/itop-portal-base/portal/public/index.php @@ -1,17 +1,9 @@ +/** + * Copyright (C) 2013-2019 Combodo SARL + * + * This file is part of iTop. + * + * 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. + * + * iTop 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * + * + */ + +use Combodo\iTop\Portal\Kernel; /** - * main.itop-portal.php + * iTopPortalEditUrlMaker * * @author Guillaume Lajarige + * @author Bruno Da Silva + * @since 2.3.0 */ class iTopPortalEditUrlMaker implements iDBObjectURLMaker { + private static $oKernel; + /** * Generate an (absolute) URL to an object, either in view or edit mode. * Returns null if the current user is not allowed to view / edit object. @@ -39,47 +48,19 @@ class iTopPortalEditUrlMaker implements iDBObjectURLMaker */ public static function PrepareObjectURL($sClass, $iId, $sMode) { - require_once APPROOT . '/lib/silex/vendor/autoload.php'; - require_once APPROOT . '/env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/src/providers/urlgeneratorserviceprovider.class.inc.php'; - require_once APPROOT . '/env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/src/helpers/urlgeneratorhelper.class.inc.php'; - require_once APPROOT . '/env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/src/providers/scopevalidatorserviceprovider.class.inc.php'; - require_once APPROOT . '/env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/src/helpers/scopevalidatorhelper.class.inc.php'; - require_once APPROOT . '/env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/src/helpers/securityhelper.class.inc.php'; - require_once APPROOT . '/env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php'; - - // Using a static var allows to preserve the object through function calls - static $oApp = null; - static $sPortalId = null; - - // Initializing Silex app (partially for faster execution) - // TODO: This should be factorised with itop-portal-base/portal/web/index.php into the ApplicationHelper class. - if ($oApp === null) - { - // Retrieving portal id - $sPortalId = basename(__DIR__); + require_once APPROOT . 'lib/composer-vendor/autoload.php'; + require_once MODULESROOT . 'itop-portal-base/portal/config/bootstrap.php'; - // Initializing Silex framework - $oApp = new Silex\Application(); - // Registering optional silex components - $oApp->register(new Combodo\iTop\Portal\Provider\UrlGeneratorServiceProvider()); - $oApp->register(new Combodo\iTop\Portal\Provider\ScopeValidatorServiceProvider(), array( - 'scope_validator.scopes_path' => utils::GetCachePath(), - 'scope_validator.scopes_filename' => $sPortalId . '.scopes.php', - 'scope_validator.instance_name' => $sPortalId - )); + $oKernel = self::GetKernelInstance(); + $oContainer = $oKernel->getContainer(); - // Preparing portal foundations (partially) - // ... - Combodo\iTop\Portal\Helper\ApplicationHelper::LoadRouters(); - Combodo\iTop\Portal\Helper\ApplicationHelper::RegisterRoutes($oApp); - // ... + /** @var string $sPortalId */ + $sPortalId = $oContainer->getParameter('combodo.portal.instance.id'); - // Loading portal scopes from the module design - Combodo\iTop\Portal\Helper\ApplicationHelper::LoadScopesConfiguration($oApp, new ModuleDesign($sPortalId)); - } - - /** @var \Combodo\iTop\Portal\Helper\UrlGenerator $oUrlGenerator */ - $oUrlGenerator = $oApp['url_generator']; + /** @var \Combodo\iTop\Portal\Routing\UrlGenerator $oUrlGenerator */ + $oUrlGenerator = $oContainer->get('url_generator'); + /** @var \Combodo\iTop\Portal\Helper\SecurityHelper $oSecurityHelper */ + $oSecurityHelper = $oContainer->get('security_helper'); // The object is reachable in the specified mode (edit/view) // @@ -88,7 +69,7 @@ class iTopPortalEditUrlMaker implements iDBObjectURLMaker switch($sMode) { case 'view': - if(!ContextTag::Check('GUI:Portal') || Combodo\iTop\Portal\Helper\SecurityHelper::IsActionAllowed($oApp, UR_ACTION_READ, $sClass, $iId)) + if(!ContextTag::Check('GUI:Portal') || $oSecurityHelper->IsActionAllowed(UR_ACTION_READ, $sClass, $iId)) { $sObjectQueryString = $oUrlGenerator->generate('p_object_view', array('sObjectClass' => $sClass, 'sObjectId' => $iId)); } @@ -97,11 +78,11 @@ class iTopPortalEditUrlMaker implements iDBObjectURLMaker case 'edit': default: // Checking if user is allowed to edit object, if not we check if it can at least view it. - if(!ContextTag::Check('GUI:Portal') || Combodo\iTop\Portal\Helper\SecurityHelper::IsActionAllowed($oApp, UR_ACTION_MODIFY, $sClass, $iId)) + if(!ContextTag::Check('GUI:Portal') || $oSecurityHelper->IsActionAllowed(UR_ACTION_MODIFY, $sClass, $iId)) { $sObjectQueryString = $oUrlGenerator->generate('p_object_edit', array('sObjectClass' => $sClass, 'sObjectId' => $iId)); } - elseif(!ContextTag::Check('GUI:Portal') || Combodo\iTop\Portal\Helper\SecurityHelper::IsActionAllowed($oApp, UR_ACTION_READ, $sClass, $iId)) + elseif(!ContextTag::Check('GUI:Portal') || $oSecurityHelper->IsActionAllowed(UR_ACTION_READ, $sClass, $iId)) { $sObjectQueryString = $oUrlGenerator->generate('p_object_view', array('sObjectClass' => $sClass, 'sObjectId' => $iId)); } @@ -144,12 +125,31 @@ class iTopPortalEditUrlMaker implements iDBObjectURLMaker { return static::PrepareObjectURL($sClass, $iId, 'edit'); } + + /** + * Returns the kernel singleton + * + * @return \Combodo\iTop\Portal\Kernel + * @since 2.7.0 + */ + private static function GetKernelInstance() + { + if(self::$oKernel === null) + { + self::$oKernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); + self::$oKernel->boot(); + } + + return self::$oKernel; + } } /** * Hyperlinks to the "view" of the object (vs edition) - * @author denis * + * @author Guillaume Lajarige + * @author Bruno Da Silva + * @since 2.3.0 */ class iTopPortalViewUrlMaker extends iTopPortalEditUrlMaker {