Переглянути джерело

REVIEWED THE FILE INCLUSION POLICY
- includes are relative to the application root folder, aka APPROOT
- changed the config file, while preserving the compatibility with older installs

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@962 a333f486-631f-4898-b8df-5754b55c2be0

romainq 14 роки тому
батько
коміт
0b583ed73e
59 змінених файлів з 369 додано та 308 видалено
  1. 2 1
      application/ajaxwebpage.class.inc.php
  2. 7 7
      application/application.inc.php
  3. 1 1
      application/applicationcontext.class.inc.php
  4. 1 1
      application/audit.category.class.inc.php
  5. 1 1
      application/audit.rule.class.inc.php
  6. 1 1
      application/clipage.class.inc.php
  7. 7 7
      application/cmdbabstract.class.inc.php
  8. 1 1
      application/csvpage.class.inc.php
  9. 3 3
      application/displayblock.class.inc.php
  10. 1 1
      application/iotask.class.inc.php
  11. 3 3
      application/itopwebpage.class.inc.php
  12. 2 2
      application/loginwebpage.class.inc.php
  13. 2 2
      application/menunode.class.inc.php
  14. 1 1
      application/nicewebpage.class.inc.php
  15. 3 3
      application/portalwebpage.class.inc.php
  16. 2 2
      application/startup.inc.php
  17. 3 3
      application/template.class.inc.php
  18. 2 2
      application/ui.autocompletewidget.class.inc.php
  19. 2 2
      application/ui.linkswidget.class.inc.php
  20. 2 2
      application/ui.passwordwidget.class.inc.php
  21. 2 2
      application/user.preferences.class.inc.php
  22. 3 3
      application/utils.inc.php
  23. 1 1
      application/wizardhelper.class.inc.php
  24. 1 1
      application/xmlpage.class.inc.php
  25. 3 0
      approot.inc.php
  26. 1 1
      core/action.class.inc.php
  27. 22 35
      core/config.class.inc.php
  28. 21 5
      core/metamodel.class.php
  29. 1 1
      core/ormpassword.class.inc.php
  30. 0 2
      modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php
  31. 9 8
      pages/UI.php
  32. 6 6
      pages/UniversalSearch.php
  33. 9 8
      pages/ajax.csvimport.php
  34. 11 10
      pages/ajax.render.php
  35. 7 6
      pages/audit.php
  36. 7 6
      pages/csvimport.php
  37. 6 5
      pages/graphviz.php
  38. 6 5
      pages/logoff.php
  39. 7 6
      pages/navigator.php
  40. 5 4
      pages/run_query.php
  41. 5 4
      pages/schema.php
  42. 8 7
      pages/xml.navigator.php
  43. 8 8
      portal/index.php
  44. 9 8
      setup/ajax.dataloader.php
  45. 3 2
      setup/email.test.php
  46. 36 31
      setup/index.php
  47. 12 6
      setup/setuppage.class.inc.php
  48. 18 18
      setup/xmldataloader.class.inc.php
  49. 8 7
      test/benchmark.php
  50. 18 17
      test/test.class.inc.php
  51. 3 2
      test/test.php
  52. 32 9
      test/testlist.inc.php
  53. 10 9
      webservices/backoffice.dataloader.php
  54. 3 2
      webservices/check_sla_for_tickets.php
  55. 3 2
      webservices/createfrommail.php
  56. 7 6
      webservices/export.php
  57. 7 6
      webservices/import.php
  58. 3 2
      webservices/soapserver.php
  59. 1 1
      webservices/webservices.class.inc.php

+ 2 - 1
application/ajaxwebpage.class.inc.php

@@ -24,7 +24,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/webpage.class.inc.php");
+require_once('../approot.inc.php');
+require_once(APPROOT."/application/webpage.class.inc.php");
  
 class ajax_page extends WebPage
 {

+ 7 - 7
application/application.inc.php

@@ -23,13 +23,13 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/applicationcontext.class.inc.php');
-require_once('../application/cmdbabstract.class.inc.php');
-require_once('../application/displayblock.class.inc.php');
-require_once('../application/audit.category.class.inc.php');
-require_once('../application/audit.rule.class.inc.php');
-//require_once('../application/menunode.class.inc.php');
-require_once('../application/utils.inc.php');
+require_once(APPROOT.'/application/applicationcontext.class.inc.php');
+require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
+require_once(APPROOT.'/application/displayblock.class.inc.php');
+require_once(APPROOT.'/application/audit.category.class.inc.php');
+require_once(APPROOT.'/application/audit.rule.class.inc.php');
+//require_once(APPROOT.'/application/menunode.class.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
 
 class ApplicationException extends CoreException
 {

+ 1 - 1
application/applicationcontext.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/utils.inc.php");
+require_once(APPROOT."/application/utils.inc.php");
 /**
  * Helper class to store and manipulate the parameters that make the application's context
  *

+ 1 - 1
application/audit.category.class.inc.php

@@ -25,7 +25,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/cmdbabstract.class.inc.php');
+require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
 
 class AuditCategory extends cmdbAbstractObject
 {

+ 1 - 1
application/audit.rule.class.inc.php

@@ -26,7 +26,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/audit.category.class.inc.php');
+require_once(APPROOT.'/application/audit.category.class.inc.php');
 
 class AuditRule extends cmdbAbstractObject
 {

+ 1 - 1
application/clipage.class.inc.php

@@ -24,7 +24,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/webpage.class.inc.php");
+require_once(APPROOT."/application/webpage.class.inc.php");
 
 class CLIPage
 {

+ 7 - 7
application/cmdbabstract.class.inc.php

@@ -31,13 +31,13 @@ define('HILIGHT_CLASS_WARNING', 'orange');
 define('HILIGHT_CLASS_OK', 'green');
 define('HILIGHT_CLASS_NONE', '');
 
-require_once('../core/cmdbobject.class.inc.php');
-require_once('../application/utils.inc.php');
-require_once('../application/applicationcontext.class.inc.php');
-require_once('../application/ui.linkswidget.class.inc.php');
-require_once('../application/ui.passwordwidget.class.inc.php');
-require_once('../application/ui.autocompletewidget.class.inc.php');
-require_once('../application/ui.htmleditorwidget.class.inc.php');
+require_once(APPROOT.'/core/cmdbobject.class.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
+require_once(APPROOT.'/application/applicationcontext.class.inc.php');
+require_once(APPROOT.'/application/ui.linkswidget.class.inc.php');
+require_once(APPROOT.'/application/ui.passwordwidget.class.inc.php');
+require_once(APPROOT.'/application/ui.autocompletewidget.class.inc.php');
+require_once(APPROOT.'/application/ui.htmleditorwidget.class.inc.php');
 
 abstract class cmdbAbstractObject extends CMDBObject
 {

+ 1 - 1
application/csvpage.class.inc.php

@@ -24,7 +24,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/webpage.class.inc.php");
+require_once(APPROOT."/application/webpage.class.inc.php");
 
 class CSVPage extends WebPage
 {

+ 3 - 3
application/displayblock.class.inc.php

@@ -23,8 +23,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/webpage.class.inc.php');
-require_once('../application/utils.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
 /**
  * Helper class to manage 'blocks' of HTML pieces that are parts of a page and contain some list of cmdb objects
  *
@@ -757,7 +757,7 @@ EOF
 			break;
 			
 			case 'open_flash_chart_ajax':
-			include '../pages/php-ofc-library/open-flash-chart.php';
+			require_once(APPROOT.'/pages/php-ofc-library/open-flash-chart.php');
 			$sChartType = isset($aExtraParams['chart_type']) ? $aExtraParams['chart_type'] : 'pie';
 
 			$oChart = new open_flash_chart();

+ 1 - 1
application/iotask.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/cmdbabstract.class.inc.php');
+require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
 
 /**
  * This class manages the input/output tasks

+ 3 - 3
application/itopwebpage.class.inc.php

@@ -23,9 +23,9 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/nicewebpage.class.inc.php");
-require_once("../application/applicationcontext.class.inc.php");
-require_once("../application/user.preferences.class.inc.php");
+require_once(APPROOT."/application/nicewebpage.class.inc.php");
+require_once(APPROOT."/application/applicationcontext.class.inc.php");
+require_once(APPROOT."/application/user.preferences.class.inc.php");
 /**
  * Web page with some associated CSS and scripts (jquery) for a fancier display
  */

+ 2 - 2
application/loginwebpage.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/nicewebpage.class.inc.php");
+require_once(APPROOT."/application/nicewebpage.class.inc.php");
 /**
  * Web page used for displaying the login form
  */
@@ -393,7 +393,7 @@ EOF
 
 		if ($bMustBeAdmin && !UserRights::IsAdministrator())
 		{	
-			require_once('../setup/setuppage.class.inc.php');
+			require_once(APPROOT.'/setup/setuppage.class.inc.php');
 			$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 			$oP->add("<h1>".Dict::S('UI:Login:Error:AccessAdmin')."</h1>\n");	
 			$oP->p("<a href=\"../pages/logoff.php\">".Dict::S('UI:LogOffMenu')."</a>");

+ 2 - 2
application/menunode.class.inc.php

@@ -23,8 +23,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/utils.inc.php');
-require_once('../application/template.class.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
+require_once(APPROOT.'/application/template.class.inc.php');
 
 
 /**

+ 1 - 1
application/nicewebpage.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/webpage.class.inc.php");
+require_once(APPROOT."/application/webpage.class.inc.php");
 /**
  * Web page with some associated CSS and scripts (jquery) for a fancier display
  */

+ 3 - 3
application/portalwebpage.class.inc.php

@@ -23,9 +23,9 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/nicewebpage.class.inc.php");
-require_once("../application/applicationcontext.class.inc.php");
-require_once("../application/user.preferences.class.inc.php");
+require_once(APPROOT."/application/nicewebpage.class.inc.php");
+require_once(APPROOT."/application/applicationcontext.class.inc.php");
+require_once(APPROOT."/application/user.preferences.class.inc.php");
 /**
  * Web page with some associated CSS and scripts (jquery) for a fancier display
  * of the Portal web page

+ 2 - 2
application/startup.inc.php

@@ -23,8 +23,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../core/cmdbobject.class.inc.php');
-require_once('../application/utils.inc.php');
+require_once(APPROOT.'/core/cmdbobject.class.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
 
 MetaModel::Startup(ITOP_CONFIG_FILE);
 

+ 3 - 3
application/template.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/displayblock.class.inc.php');
+require_once(APPROOT.'/application/displayblock.class.inc.php');
 /**
  * This class manages the special template format used internally to build the iTop web pages
  */
@@ -218,8 +218,8 @@ class DisplayTemplate
 	 */
 	static public function UnitTest()
 	{
-		require_once('../application/startup.inc.php');
-		require_once("../application/itopwebpage.class.inc.php");
+		require_once(APPROOT.'/application/startup.inc.php');
+		require_once(APPROOT."/application/itopwebpage.class.inc.php");
 		
 		$sTemplate = '<div class="page_header">
 		<div class="actions_details"><a href="#"><span>Actions</span></a></div>

+ 2 - 2
application/ui.autocompletewidget.class.inc.php

@@ -58,8 +58,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/webpage.class.inc.php');
-require_once('../application/displayblock.class.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/displayblock.class.inc.php');
 
 class UIAutoCompleteWidget 
 {

+ 2 - 2
application/ui.linkswidget.class.inc.php

@@ -23,8 +23,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/webpage.class.inc.php');
-require_once('../application/displayblock.class.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/displayblock.class.inc.php');
 
 class UILinksWidget 
 {

+ 2 - 2
application/ui.passwordwidget.class.inc.php

@@ -24,8 +24,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/webpage.class.inc.php');
-require_once('../application/displayblock.class.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/displayblock.class.inc.php');
 
 class UIPasswordWidget 
 {

+ 2 - 2
application/user.preferences.class.inc.php

@@ -22,8 +22,8 @@
  * @author      Denis Flaven <denis.flaven@combodo.com>
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
-require_once('../core/dbobject.class.php');
-require_once('../core/userrights.class.inc.php');
+require_once(APPROOT.'/core/dbobject.class.php');
+require_once(APPROOT.'/core/userrights.class.inc.php');
 
 /**
  * This class is used to store, in a persistent manner, user related settings (preferences)

+ 3 - 3
application/utils.inc.php

@@ -23,10 +23,10 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../core/config.class.inc.php');
-require_once('../application/transaction.class.inc.php');
+require_once(APPROOT.'/core/config.class.inc.php');
+require_once(APPROOT.'/application/transaction.class.inc.php');
 
-define('ITOP_CONFIG_FILE', '../config-itop.php');
+define('ITOP_CONFIG_FILE', APPROOT.'/config-itop.php');
 
 class FileUploadException extends Exception
 {

+ 1 - 1
application/wizardhelper.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/uiwizard.class.inc.php');
+require_once(APPROOT.'/application/uiwizard.class.inc.php');
 
 class WizardHelper
 {

+ 1 - 1
application/xmlpage.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/webpage.class.inc.php");
+require_once(APPROOT."/application/webpage.class.inc.php");
 /**
  * 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

+ 3 - 0
approot.inc.php

@@ -0,0 +1,3 @@
+<?php
+define('APPROOT', dirname(__FILE__).'/');
+?>

+ 1 - 1
core/action.class.inc.php

@@ -24,7 +24,7 @@
  */
 
 
-require_once('../core/email.class.inc.php');
+require_once(APPROOT.'/core/email.class.inc.php');
 
 /**
  * A user defined action, to customize the application  

+ 22 - 35
core/config.class.inc.php

@@ -267,36 +267,36 @@ class Config
 		$this->m_sFile = $sConfigFile;
 		$this->m_aAppModules = array(
 			// Some default modules, always present can be move to an official iTop Module later if needed
-			'../application/transaction.class.inc.php',
-			'../application/menunode.class.inc.php',
-			'../application/user.preferences.class.inc.php',
-			'../application/audit.rule.class.inc.php',
+			'/application/transaction.class.inc.php',
+			'/application/menunode.class.inc.php',
+			'/application/user.preferences.class.inc.php',
+			'/application/audit.rule.class.inc.php',
 // Romain - That's dirty, because those 3 classes are in fact part of the core
 //          but I needed those classes to be derived from cmdbAbstractObject
 //          (to be managed via the GUI) and this class in not really known from
 //          the core, PLUS I needed the includes to be there also for the setup
 //          to create the tables.
-			'../core/event.class.inc.php',
-			'../core/action.class.inc.php',
-			'../core/trigger.class.inc.php',
+			'/core/event.class.inc.php',
+			'/core/action.class.inc.php',
+			'/core/trigger.class.inc.php',
 		);
 		$this->m_aDataModels = array();
 		$this->m_aAddons = array(
 			// Default AddOn, always present can be moved to an official iTop Module later if needed
-			'user rights' => '../addons/userrights/userrightsprofile.class.inc.php',
+			'user rights' => '/addons/userrights/userrightsprofile.class.inc.php',
 		);
 		$this->m_aDictionaries = array(
 			// Default dictionaries, always present can be moved to an official iTop Module later if needed
-			'../dictionaries/dictionary.itop.core.php',
-			'../dictionaries/dictionary.itop.ui.php',		// Support for English
-			'../dictionaries/fr.dictionary.itop.ui.php',	// Support for French
-			'../dictionaries/fr.dictionary.itop.core.php',	// Support for French
-			'../dictionaries/es_cr.dictionary.itop.ui.php',	// Support for Spanish (from Costa Rica)
-			'../dictionaries/es_cr.dictionary.itop.core.php',	// Support for Spanish (from Costa Rica)
-			'../dictionaries/de.dictionary.itop.ui.php',	// Support for German
-			'../dictionaries/de.dictionary.itop.core.php',	// Support for German
-			'../dictionaries/pt_br.dictionary.itop.ui.php',	// Support for Brazilian Portuguese
-			'../dictionaries/pt_br.dictionary.itop.core.php',	// Support for Brazilian Portuguese
+			'/dictionaries/dictionary.itop.core.php',
+			'/dictionaries/dictionary.itop.ui.php',		// Support for English
+			'/dictionaries/fr.dictionary.itop.ui.php',	// Support for French
+			'/dictionaries/fr.dictionary.itop.core.php',	// Support for French
+			'/dictionaries/es_cr.dictionary.itop.ui.php',	// Support for Spanish (from Costa Rica)
+			'/dictionaries/es_cr.dictionary.itop.core.php',	// Support for Spanish (from Costa Rica)
+			'/dictionaries/de.dictionary.itop.ui.php',	// Support for German
+			'/dictionaries/de.dictionary.itop.core.php',	// Support for German
+			'/dictionaries/pt_br.dictionary.itop.ui.php',	// Support for Brazilian Portuguese
+			'/dictionaries/pt_br.dictionary.itop.core.php',	// Support for Brazilian Portuguese
 		);
 
 		foreach($this->m_aSettings as $sPropCode => $aSettingInfo)
@@ -396,7 +396,8 @@ class Config
 		}
 		if (!array_key_exists('user rights', $MyModules['addons']))
 		{
-			$MyModules['addons']['user rights'] = '../addons/userrights/userrightsnull.class.inc.php';
+			// Add one, by default
+			$MyModules['addons']['user rights'] = '/addons/userrights/userrightsnull.class.inc.php';
 		}
 		if (!array_key_exists('dictionaries', $MyModules))
 		{
@@ -452,22 +453,8 @@ class Config
 
 	protected function Verify()
 	{
-		foreach ($this->m_aAppModules as $sModule => $sToInclude)
-		{
-			$this->CheckFile('application module', $sToInclude);
-		}
-		foreach ($this->m_aDataModels as $sModule => $sToInclude)
-		{
-			$this->CheckFile('business model', $sToInclude);
-		}
-		foreach ($this->m_aAddons as $sModule => $sToInclude)
-		{
-			$this->CheckFile('addon module', $sToInclude);
-		}
-		foreach ($this->m_aDictionaries as $sModule => $sToInclude)
-		{
-			$this->CheckFile('dictionary', $sToInclude);
-		}
+		// Files are verified later on, just before using them -see MetaModel::Plugin()
+		// (we have their final path at that point)
 	}
 
 	public function GetModuleSetting($sModule, $sProperty, $defaultvalue = null)

+ 21 - 5
core/metamodel.class.php

@@ -3251,7 +3251,7 @@ abstract class MetaModel
 			if (self::$m_oConfig->GetLogIssue())
 			{
 				self::$m_bLogIssue = true;
-				IssueLog::Enable('../error.log');
+				IssueLog::Enable(APPROOT.'/error.log');
 			}
 			self::$m_bLogNotification = self::$m_oConfig->GetLogNotification();
 			self::$m_bLogWebService = self::$m_oConfig->GetLogWebService();
@@ -3289,7 +3289,7 @@ abstract class MetaModel
 
 		// Romain: this is the only way I've found to cope with the fact that
 		//         classes have to be derived from cmdbabstract (to be editable in the UI)
-		require_once('../application/cmdbabstract.class.inc.php');
+		require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
 
 		foreach (self::$m_oConfig->GetAppModules() as $sModule => $sToInclude)
 		{
@@ -3348,11 +3348,27 @@ abstract class MetaModel
 
 	protected static function Plugin($sConfigFile, $sModuleType, $sToInclude)
 	{
-		if (!file_exists($sToInclude))
+		if (substr($sToInclude, 0, 3) == '../')
 		{
-			throw new CoreException('Wrong filename in configuration file', array('file' => $sConfigFile, 'module' => $sModuleType, 'filename' => $sToInclude));
+			// Preserve compatibility with config files written before 1.0.1
+			// Replace '../' by '<root>/'
+			$sFile = APPROOT.'/'.substr($sToInclude, 3);
 		}
-		require_once($sToInclude);
+		elseif (substr($sToInclude, 0, 1) == '/')
+		{
+			// Preferred...
+			$sFile = APPROOT.$sToInclude;
+		}
+		else
+		{
+			// Leave as is - should be an absolute path
+			$sFile = $sToInclude;
+		}
+		if (!file_exists($sFile))
+		{
+			throw new CoreException('Wrong filename in configuration file', array('file' => $sConfigFile, 'module' => $sModuleType, 'filename' => $sFile));
+		}
+		require_once($sFile);
 	}
 
 	protected static function InitPlugins()

+ 1 - 1
core/ormpassword.class.inc.php

@@ -14,7 +14,7 @@
 //   along with this program; if not, write to the Free Software
 //   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-require_once('../core/simplecrypt.class.inc.php');
+require_once(APPROOT.'/core/simplecrypt.class.inc.php');
 
 /**
  * ormPassword

+ 0 - 2
modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php

@@ -23,8 +23,6 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/cmdbabstract.class.inc.php');
-require_once('../application/template.class.inc.php');
 
 MetaModel::RegisterRelation("impacts", array("description"=>"Objects impacted by", "verb_down"=>"impacts", "verb_up"=>"depends on"));
 MetaModel::RegisterRelation("depends on", array("description"=>"That impacts ", "verb_down"=>"depends on", "verb_up"=>"impacts"));

+ 9 - 8
pages/UI.php

@@ -495,16 +495,17 @@ EOF
  * ***********************************************************************************/
 try
 {
-	require_once('../application/application.inc.php');
-	require_once('../application/itopwebpage.class.inc.php');
-	require_once('../application/wizardhelper.class.inc.php');
+	require_once('../approot.inc.php');
+	require_once(APPROOT.'/application/application.inc.php');
+	require_once(APPROOT.'/application/itopwebpage.class.inc.php');
+	require_once(APPROOT.'/application/wizardhelper.class.inc.php');
 
-	require_once('../application/startup.inc.php');
+	require_once(APPROOT.'/application/startup.inc.php');
 	$operation = utils::ReadParam('operation', '');
 
 	$oKPI = new ExecutionKPI();
 
-	require_once('../application/loginwebpage.class.inc.php');
+	require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 	LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 	$oAppContext = new ApplicationContext();
 
@@ -1308,7 +1309,7 @@ EOF
 		{
 			throw new ApplicationException(Dict::Format('UI:Error:4ParametersMissing', 'class', 'id', 'target_class', 'link_attr'));
 		}
-		require_once('../application/uilinkswizard.class.inc.php');
+		require_once(APPROOT.'/application/uilinkswizard.class.inc.php');
 		$oWizard = new UILinksWizard($sClass, $sLinkAttr, $id, $sTargetClass);
 		$oWizard->Display($oP, array('StartWithAdd' => $bAddObjects));		
 		break;
@@ -1490,7 +1491,7 @@ EOF
 }
 catch(CoreException $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	if ($e instanceof SecurityException)
 	{
@@ -1533,7 +1534,7 @@ catch(CoreException $e)
 }
 catch(Exception $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	$oP->add("<h1>".Dict::S('UI:FatalErrorMessage')."</h1>\n");	
 	$oP->error(Dict::Format('UI:Error_Details', $e->getMessage()));	

+ 6 - 6
pages/UniversalSearch.php

@@ -23,13 +23,14 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/itopwebpage.class.inc.php');
-require_once('../application/applicationcontext.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/itopwebpage.class.inc.php');
+require_once(APPROOT.'/application/applicationcontext.class.inc.php');
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(true); // Check user rights and prompt if needed (must be admin)
 
 $oAppContext = new ApplicationContext();
@@ -47,7 +48,6 @@ $sOperation = utils::ReadParam('operation', '');
 
 // First part: select the class to search for
 $oP->add("<form>");
-$oP->add("<input type=\"hidden\" name=\"org_id\" value=\"$currentOrganization\" />");
 $oP->add(Dict::S('UI:UniversalSearch:LabelSelectTheClass')."<select style=\"width: 150px;\" id=\"select_class\" name=\"baseClass\" onChange=\"this.form.submit();\">");
 $aClassLabels = array();
 foreach(MetaModel::GetClasses('bizmodel') as $sCurrentClass)

+ 9 - 8
pages/ajax.csvimport.php

@@ -23,12 +23,13 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/webpage.class.inc.php');
-require_once('../application/ajaxwebpage.class.inc.php');
-require_once('../application/wizardhelper.class.inc.php');
-require_once('../application/ui.linkswidget.class.inc.php');
-require_once('../application/csvpage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/ajaxwebpage.class.inc.php');
+require_once(APPROOT.'/application/wizardhelper.class.inc.php');
+require_once(APPROOT.'/application/ui.linkswidget.class.inc.php');
+require_once(APPROOT.'/application/csvpage.class.inc.php');
 
 /**
  * Determines if the name of the field to be mapped correspond
@@ -207,9 +208,9 @@ function GetMappingForField($sClassName, $sFieldName, $iFieldIndex, $bAdvancedMo
 	return $sHtml;
 }
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 
 

+ 11 - 10
pages/ajax.render.php

@@ -23,17 +23,18 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/webpage.class.inc.php');
-require_once('../application/ajaxwebpage.class.inc.php');
-require_once('../application/wizardhelper.class.inc.php');
-require_once('../application/ui.linkswidget.class.inc.php');
-require_once('../application/ui.autocompletewidget.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/ajaxwebpage.class.inc.php');
+require_once(APPROOT.'/application/wizardhelper.class.inc.php');
+require_once(APPROOT.'/application/ui.linkswidget.class.inc.php');
+require_once(APPROOT.'/application/ui.autocompletewidget.class.inc.php');
 
-require_once('../application/startup.inc.php');
-require_once('../application/user.preferences.class.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
+require_once(APPROOT.'/application/user.preferences.class.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(false /* bMustBeAdmin */, true /* IsAllowedToPortalUsers */); // Check user rights and prompt if needed
 
 $oPage = new ajax_page("");
@@ -48,7 +49,7 @@ $sStyle = utils::ReadParam('style', 'list');
 switch($operation)
 {
 	case 'addObjects':
-	require_once('../application/uilinkswizard.class.inc.php');
+	require_once(APPROOT.'/application/uilinkswizard.class.inc.php');
 	$sClass = utils::ReadParam('class', '', 'get');
 	$sLinkedClass = utils::ReadParam('linkedClass', '');
 	$sLinkageAttr = utils::ReadParam('linkageAttr', '');

+ 7 - 6
pages/audit.php

@@ -24,14 +24,15 @@
  */
 try
 {
-	require_once('../application/application.inc.php');
-	require_once('../application/itopwebpage.class.inc.php');
+	require_once('../approot.inc.php');
+	require_once(APPROOT.'/application/application.inc.php');
+	require_once(APPROOT.'/application/itopwebpage.class.inc.php');
 	
-	require_once('../application/startup.inc.php');
+	require_once(APPROOT.'/application/startup.inc.php');
 	$operation = utils::ReadParam('operation', '');
 	$oAppContext = new ApplicationContext();
 	
-	require_once('../application/loginwebpage.class.inc.php');
+	require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 	LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 	
 	$oP = new iTopWebPage(Dict::S('UI:Audit:Title'));
@@ -179,7 +180,7 @@ try
 }
 catch(CoreException $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	$oP->add("<h1>".Dict::S('UI:FatalErrorMessage')."</h1>\n");	
 	$oP->error(Dict::Format('UI:Error_Details', $e->getHtmlDesc()));	
@@ -208,7 +209,7 @@ catch(CoreException $e)
 }
 catch(Exception $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	$oP->add("<h1>".Dict::S('UI:FatalErrorMessage')."</h1>\n");	
 	$oP->error(Dict::Format('UI:Error_Details', $e->getMessage()));	

+ 7 - 6
pages/csvimport.php

@@ -26,12 +26,13 @@
 try
 {
 	ini_set('memory_limit', '256M');
-	require_once('../application/application.inc.php');
-	require_once('../application/itopwebpage.class.inc.php');
+	require_once('../approot.inc.php');
+	require_once(APPROOT.'/application/application.inc.php');
+	require_once(APPROOT.'/application/itopwebpage.class.inc.php');
 	
-	require_once('../application/startup.inc.php');
+	require_once(APPROOT.'/application/startup.inc.php');
 	
-	require_once('../application/loginwebpage.class.inc.php');
+	require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 	LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 	
 	$oAppContext = new ApplicationContext();
@@ -1146,7 +1147,7 @@ EOF
 }
 catch(CoreException $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	$oP->add("<h1>".Dict::S('UI:FatalErrorMessage')."</h1>\n");	
 	$oP->error(Dict::Format('UI:Error_Details', $e->getHtmlDesc()));	
@@ -1175,7 +1176,7 @@ catch(CoreException $e)
 }
 catch(Exception $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	$oP->add("<h1>".Dict::S('UI:FatalErrorMessage')."</h1>\n");	
 	$oP->error(Dict::Format('UI:Error_Details', $e->getMessage()));	

+ 6 - 5
pages/graphviz.php

@@ -23,13 +23,14 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/itopwebpage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/itopwebpage.class.inc.php');
 
-require_once('../application/startup.inc.php');
-require_once('../application/utils.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 
 /**

+ 6 - 5
pages/logoff.php

@@ -14,16 +14,17 @@
 //   along with this program; if not, write to the Free Software
 //   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-require_once('../application/application.inc.php');
-require_once('../application/itopwebpage.class.inc.php');
-require_once('../application/wizardhelper.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/itopwebpage.class.inc.php');
+require_once(APPROOT.'/application/wizardhelper.class.inc.php');
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 $oAppContext = new ApplicationContext();
 $currentOrganization = utils::ReadParam('org_id', '');
 $operation = utils::ReadParam('operation', '');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 session_name(utils::GetConfig()->Get('session_name'));
 session_start();
 LoginWebPage::ResetSession();

+ 7 - 6
pages/navigator.php

@@ -17,12 +17,13 @@
 /**
  * Display the Flash navigator, in the whole pane
  */
-require_once('../application/application.inc.php');
-require_once('../application/itopwebpage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/itopwebpage.class.inc.php');
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 
 $sOperation = utils::ReadParam('operation', 'menu');
@@ -36,8 +37,8 @@ $id = utils::ReadParam('id', 0);
 $sRelation = utils::ReadParam('relation', 'neighbours');
 
 try
-{
-	$width = 1000;
+{
+	$width = 1000;
 	$height = 700;
 	$sDrillUrl = urlencode('../pages/UI.php?operation=details');
 //	$sParams = "pWidth=$width&pHeight=$height&drillUrl=".urlencode('../pages/UI.php?operation=details')."&displayController=false&xmlUrl=".urlencode("./xml.navigator.php")."&obj_class=$sClass&obj_id=$id&relation=$sRelation";

+ 5 - 4
pages/run_query.php

@@ -23,12 +23,13 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/itopwebpage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/itopwebpage.class.inc.php');
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(true); // Check user rights and prompt if needed (must be admin)
 
 function ShowExamples($oP, $sExpression)

+ 5 - 4
pages/schema.php

@@ -23,12 +23,13 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/itopwebpage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/itopwebpage.class.inc.php');
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(true); // Check user rights and prompt if needed (must be admin)
 
 

+ 8 - 7
pages/xml.navigator.php

@@ -24,11 +24,12 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/webpage.class.inc.php');
-require_once('../application/ajaxwebpage.class.inc.php');
-require_once('../application/wizardhelper.class.inc.php');
-require_once('../application/ui.linkswidget.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/ajaxwebpage.class.inc.php');
+require_once(APPROOT.'/application/wizardhelper.class.inc.php');
+require_once(APPROOT.'/application/ui.linkswidget.class.inc.php');
 
 define('MAX_RECURSION_DEPTH', 20);
 
@@ -104,8 +105,8 @@ function BuildIconPath($sIconPath)
 	return $sFullURLPath.$sIconPath;
 }
 
-require_once('../application/startup.inc.php');
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 // For developping the Navigator from within Flash
 //session_start();
 //$_SESSION['auth_user'] = 'admin';

+ 8 - 8
portal/index.php

@@ -22,9 +22,9 @@
  * @author      Denis Flaven <denis.flaven@combodo.com>
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
-require_once('../application/application.inc.php');
-require_once('../application/nicewebpage.class.inc.php');
-require_once('../application/wizardhelper.class.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/nicewebpage.class.inc.php');
+require_once(APPROOT.'/application/wizardhelper.class.inc.php');
 
 /**
  * Get the list of parameters (i.e. attribute codes) to be handled while creating a new UserRequest object
@@ -733,12 +733,12 @@ function GetUserOrg($oP)
 
 try
 {
-	require_once('../application/startup.inc.php');
-	require_once('../application/portalwebpage.class.inc.php');
+	require_once(APPROOT.'/application/startup.inc.php');
+	require_once(APPROOT.'/application/portalwebpage.class.inc.php');
 	$oAppContext = new ApplicationContext();
 	$sOperation = utils::ReadParam('operation', '');
 	
-	require_once('../application/loginwebpage.class.inc.php');
+	require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 	LoginWebPage::DoLogin(false /* bMustBeAdmin */, true /* IsAllowedToPortalUsers */); // Check user rights and prompt if needed
 
 	$oUserOrg = GetUserOrg($oP);
@@ -775,7 +775,7 @@ try
 }
 catch(CoreException $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	$oP->add("<h1>".Dict::S('UI:FatalErrorMessage')."</h1>\n");	
 	$oP->error(Dict::Format('UI:Error_Details', $e->getHtmlDesc()));	
@@ -811,7 +811,7 @@ catch(CoreException $e)
 }
 catch(Exception $e)
 {
-	require_once('../setup/setuppage.class.inc.php');
+	require_once(APPROOT.'/setup/setuppage.class.inc.php');
 	$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
 	$oP->add("<h1>".Dict::S('UI:FatalErrorMessage')."</h1>\n");	
 	$oP->error(Dict::Format('UI:Error_Details', $e->getMessage()));	

+ 9 - 8
setup/ajax.dataloader.php

@@ -31,8 +31,9 @@
  * 'percent' integer 0..100 the percentage of completion once the file has been loaded 
  */ 
 define('SAFE_MINIMUM_MEMORY', 32*1024*1024);
-require_once('../application/utils.inc.php');
-require_once('./setuppage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
+require_once(APPROOT.'/setup/setuppage.class.inc.php');
 
 $sMemoryLimit = trim(ini_get('memory_limit'));
 if (empty($sMemoryLimit))
@@ -87,14 +88,14 @@ ini_set('error_append_string', '</phpfatalerror>');
 // Starts the capture of the ouput, and sets a filter to capture the fatal errors.
 ob_start('FatalErrorCatcher'); // Start capturing the output, and pass it through the fatal error catcher
 
-require_once('../core/config.class.inc.php');
-require_once('../core/log.class.inc.php');
-require_once('../core/kpi.class.inc.php');
-require_once('../core/cmdbsource.class.inc.php');
+require_once(APPROOT.'/core/config.class.inc.php');
+require_once(APPROOT.'/core/log.class.inc.php');
+require_once(APPROOT.'/core/kpi.class.inc.php');
+require_once(APPROOT.'/core/cmdbsource.class.inc.php');
 require_once('./xmldataloader.class.inc.php');
 
-define('TMP_CONFIG_FILE', '../tmp-config-itop.php');
-//define('FINAL_CONFIG_FILE', '../config-itop.php');
+define('TMP_CONFIG_FILE', APPROOT.'/tmp-config-itop.php');
+//define('FINAL_CONFIG_FILE', APPROOT.'/config-itop.php');
 
 // Never cache this page
 header("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1

+ 3 - 2
setup/email.test.php

@@ -26,8 +26,9 @@
 /**
  * Wizard to configure and initialize the iTop application
  */
-require_once('../application/utils.inc.php');
-require_once('../core/email.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
+require_once(APPROOT.'/core/email.class.inc.php');
 require_once('./setuppage.class.inc.php');
 
 $sOperation = Utils::ReadParam('operation', 'step1');

+ 36 - 31
setup/index.php

@@ -23,15 +23,16 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/utils.inc.php');
-require_once('../core/config.class.inc.php');
-require_once('../core/log.class.inc.php');
-require_once('../core/kpi.class.inc.php');
-require_once('../core/cmdbsource.class.inc.php');
-require_once('./setuppage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
+require_once(APPROOT.'/core/config.class.inc.php');
+require_once(APPROOT.'/core/log.class.inc.php');
+require_once(APPROOT.'/core/kpi.class.inc.php');
+require_once(APPROOT.'/core/cmdbsource.class.inc.php');
+require_once(APPROOT.'/setup/setuppage.class.inc.php');
 
-define('TMP_CONFIG_FILE', '../tmp-config-itop.php');
-define('FINAL_CONFIG_FILE', '../config-itop.php');
+define('TMP_CONFIG_FILE', APPROOT.'/tmp-config-itop.php');
+define('FINAL_CONFIG_FILE', APPROOT.'/config-itop.php');
 define('PHP_MIN_VERSION', '5.2.0');
 define('MYSQL_MIN_VERSION', '5.0.0');
 define('MIN_MEMORY_LIMIT', 32*1024*1024);
@@ -395,23 +396,23 @@ function GetModuleName($sModuleId)
  */    
 function InitDataModel(SetupWebPage $oP, $sConfigFileName, $bModelOnly = true)
 {
-	require_once('../core/log.class.inc.php');
-	require_once('../core/kpi.class.inc.php');
-	require_once('../core/coreexception.class.inc.php');
-	require_once('../core/dict.class.inc.php');
-	require_once('../core/attributedef.class.inc.php');
-	require_once('../core/filterdef.class.inc.php');
-	require_once('../core/stimulus.class.inc.php');
-	require_once('../core/MyHelpers.class.inc.php');
-	require_once('../core/expression.class.inc.php');
-	require_once('../core/cmdbsource.class.inc.php');
-	require_once('../core/sqlquery.class.inc.php');
-	require_once('../core/dbobject.class.php');
-	require_once('../core/dbobjectsearch.class.php');
-	require_once('../core/dbobjectset.class.php');
-	require_once('../application/cmdbabstract.class.inc.php');
-	require_once('../core/userrights.class.inc.php');
-	require_once('../setup/moduleinstallation.class.inc.php');
+	require_once(APPROOT.'/core/log.class.inc.php');
+	require_once(APPROOT.'/core/kpi.class.inc.php');
+	require_once(APPROOT.'/core/coreexception.class.inc.php');
+	require_once(APPROOT.'/core/dict.class.inc.php');
+	require_once(APPROOT.'/core/attributedef.class.inc.php');
+	require_once(APPROOT.'/core/filterdef.class.inc.php');
+	require_once(APPROOT.'/core/stimulus.class.inc.php');
+	require_once(APPROOT.'/core/MyHelpers.class.inc.php');
+	require_once(APPROOT.'/core/expression.class.inc.php');
+	require_once(APPROOT.'/core/cmdbsource.class.inc.php');
+	require_once(APPROOT.'/core/sqlquery.class.inc.php');
+	require_once(APPROOT.'/core/dbobject.class.php');
+	require_once(APPROOT.'/core/dbobjectsearch.class.php');
+	require_once(APPROOT.'/core/dbobjectset.class.php');
+	require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
+	require_once(APPROOT.'/core/userrights.class.inc.php');
+	require_once(APPROOT.'/setup/moduleinstallation.class.inc.php');
 	$oP->log("Info - MetaModel::Startup from file '$sConfigFileName' (ModelOnly = $bModelOnly)");
 
 	MetaModel::Startup($sConfigFileName, $bModelOnly);
@@ -528,8 +529,9 @@ function CreateAdminAccount(SetupWebPage $oP, Config $oConfig, $sAdminUser, $sAd
 	}
 }
 
-function ListModuleFiles($sDirectory, SetupWebPage $oP)
+function ListModuleFiles($sRelDir, SetupWebPage $oP)
 {
+	$sDirectory = APPROOT.$sRelDir;
 	//echo "<p>$sDirectory</p>\n";
 	if ($hDir = opendir($sDirectory))
 	{
@@ -541,11 +543,12 @@ function ListModuleFiles($sDirectory, SetupWebPage $oP)
 			{
 				if (($sFile != '.') && ($sFile != '..') && ($sFile != '.svn'))
 				{
-					ListModuleFiles($sDirectory.'/'.$sFile, $oP);
+					ListModuleFiles($sRelDir.'/'.$sFile, $oP);
 				}
 			}
 			else if (preg_match('/^module\.(.*).php$/i', $sFile, $aMatches))
 			{
+				$oP->SetModulePath($sRelDir);
 				try
 				{
 					//echo "<p>Loading: $sDirectory/$sFile...</p>\n";
@@ -593,6 +596,7 @@ function PopulateDataFilesList(SetupWebPage $oP, $aParamValues)
 	foreach($aStructureDataFiles as $sFile)
 	{
 		// Under Windows, it is a must to escape backslashes (not an issue until a folder name starts with t or n, etc...)
+		$sFile = APPROOT.$sFile;
 		$sFile = str_replace('\\', '\\\\', $sFile);
 		$oP->add("aFilesToLoad[aFilesToLoad.length] = '$sFile';\n");
 	}
@@ -604,6 +608,7 @@ function PopulateDataFilesList(SetupWebPage $oP, $aParamValues)
 	foreach($aSampleDataFiles as $sFile)
 	{
 		// Under Windows, it is a must to escape backslashes (not an issue until a folder name starts with t or n, etc...)
+		$sFile = APPROOT.$sFile;
 		$sFile = str_replace('\\', '\\\\', $sFile);
 		$oP->add("aFilesToLoad[aFilesToLoad.length] = '$sFile';\n");
 	}
@@ -649,7 +654,7 @@ function AddParamsToForm(SetupWebpage $oP, $aParamValues, $aExcludeParams = arra
 function GetAvailableModules(SetupWebpage $oP)
 {
 	clearstatcache();
-	ListModuleFiles('../modules/', $oP);
+	ListModuleFiles('/modules', $oP);
 	return $oP->GetModules();
 }
 
@@ -663,14 +668,14 @@ function BuildConfig(SetupWebpage $oP, Config &$oConfig, $aParamValues)
 	$aAddOns = $oConfig->GetAddOns();
 	$aAppModules = $oConfig->GetAppModules();
 	$aDataModels = $oConfig->GetDataModels();
-	$sDictionaries = $oConfig->GetDictionaries();
+	$aDictionaries = $oConfig->GetDictionaries();
 	// Merge the values with the ones provided by the modules
 	// Make sure when don't load the same file twice...
 	foreach($aParamValues['module'] as $sModuleId)
 	{
 		$oP->log('Installed iTop module: '. $sModuleId);
 		$aDataModels = array_unique(array_merge($aDataModels, $aAvailableModules[$sModuleId]['datamodel']));
-		$sDictionaries = array_unique(array_merge($sDictionaries, $aAvailableModules[$sModuleId]['dictionary']));
+		$aDictionaries = array_unique(array_merge($aDictionaries, $aAvailableModules[$sModuleId]['dictionary']));
 		foreach($aAvailableModules[$sModuleId]['settings'] as $sProperty => $value)
 		{
 			list($sName, $sVersion) = GetModuleName($sModuleId);
@@ -680,7 +685,7 @@ function BuildConfig(SetupWebpage $oP, Config &$oConfig, $aParamValues)
 	$oConfig->SetAddOns($aAddOns);
 	$oConfig->SetAppModules($aAppModules);
 	$oConfig->SetDataModels($aDataModels);
-	$oConfig->SetDictionaries($sDictionaries);
+	$oConfig->SetDictionaries($aDictionaries);
 }
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////

+ 12 - 6
setup/setuppage.class.inc.php

@@ -23,8 +23,8 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once("../application/nicewebpage.class.inc.php");
-define('INSTALL_LOG_FILE', '../setup.log');
+require_once(APPROOT."/application/nicewebpage.class.inc.php");
+define('INSTALL_LOG_FILE', APPROOT.'/setup.log');
 date_default_timezone_set('Europe/Paris');
 class SetupWebPage extends NiceWebPage
 {
@@ -258,9 +258,15 @@ table.formTable {
 	
 	static $m_aModules = array();
 	
-	// All the entries below are list of (relative) file paths
+	// All the entries below are list of file paths relative to the module directory
 	static $m_aFilesList = array('datamodel', 'dictionary', 'data.struct', 'data.sample');
 
+	static $m_sModulePath = null;
+	public function SetModulePath($sModulePath)
+	{
+		self::$m_sModulePath = $sModulePath;
+	}
+
 	public static function AddModule($sFilePath, $sId, $aArgs)
 	{
 		foreach (self::$m_aModuleArgs as $sArgName => $sArgDesc)
@@ -272,14 +278,14 @@ table.formTable {
 		}
 
 		self::$m_aModules[$sId] = $aArgs;
-		$sDirPart = dirname($sFilePath).'/';
+
 		foreach(self::$m_aFilesList as $sAttribute)
 		{
 			// All the items below are list of files, that are relative to the current file
-			// being loaded, let's update their path to store a full (absolute) path in the config
+			// being loaded, let's update their path to store path relative to the application directory
 			foreach(self::$m_aModules[$sId][$sAttribute] as $idx => $sRelativePath)
 			{
-				self::$m_aModules[$sId][$sAttribute][$idx] = $sDirPart.$sRelativePath;
+				self::$m_aModules[$sId][$sAttribute][$idx] = self::$m_sModulePath.'/'.$sRelativePath;
 			}
 		}
 	}

+ 18 - 18
setup/xmldataloader.class.inc.php

@@ -23,7 +23,7 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-define ('KEYS_CACHE_FILE', '../keyscache.tmp');
+define ('KEYS_CACHE_FILE', APPROOT.'/keyscache.tmp');
 /**
  * Class to load sets of objects from XML files into the database
  * XML files can be produced by the 'export' web service or by any other means
@@ -51,7 +51,7 @@ class XMLDataLoader
 		$this->m_aKeys = array();
 		$this->m_aObjectsCache = array();
 		$this->m_oChange = null;
-		$this->m_sCacheFileName = dirname(__FILE__).'/'.KEYS_CACHE_FILE;
+		$this->m_sCacheFileName = KEYS_CACHE_FILE;
 		$this->InitDataModel($sConfigFileName);
 		$this->LoadKeysCache();
 		$this->m_bSessionActive = true;
@@ -121,22 +121,22 @@ class XMLDataLoader
 	 */	 	
 	protected function InitDataModel($sConfigFileName)
 	{
-		require_once('../core/log.class.inc.php');
-		require_once('../core/kpi.class.inc.php');
-		require_once('../core/coreexception.class.inc.php');
-		require_once('../core/dict.class.inc.php');
-		require_once('../core/attributedef.class.inc.php');
-		require_once('../core/filterdef.class.inc.php');
-		require_once('../core/stimulus.class.inc.php');
-		require_once('../core/MyHelpers.class.inc.php');
-		require_once('../core/expression.class.inc.php');
-		require_once('../core/cmdbsource.class.inc.php');
-		require_once('../core/sqlquery.class.inc.php');
-		require_once('../core/dbobject.class.php');
-		require_once('../core/dbobjectsearch.class.php');
-		require_once('../core/dbobjectset.class.php');
-		require_once('../application/cmdbabstract.class.inc.php');
-		require_once('../core/userrights.class.inc.php');
+		require_once(APPROOT.'/core/log.class.inc.php');
+		require_once(APPROOT.'/core/kpi.class.inc.php');
+		require_once(APPROOT.'/core/coreexception.class.inc.php');
+		require_once(APPROOT.'/core/dict.class.inc.php');
+		require_once(APPROOT.'/core/attributedef.class.inc.php');
+		require_once(APPROOT.'/core/filterdef.class.inc.php');
+		require_once(APPROOT.'/core/stimulus.class.inc.php');
+		require_once(APPROOT.'/core/MyHelpers.class.inc.php');
+		require_once(APPROOT.'/core/expression.class.inc.php');
+		require_once(APPROOT.'/core/cmdbsource.class.inc.php');
+		require_once(APPROOT.'/core/sqlquery.class.inc.php');
+		require_once(APPROOT.'/core/dbobject.class.php');
+		require_once(APPROOT.'/core/dbobjectsearch.class.php');
+		require_once(APPROOT.'/core/dbobjectset.class.php');
+		require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
+		require_once(APPROOT.'/core/userrights.class.inc.php');
 		MetaModel::Startup($sConfigFileName);
 	}
 	

+ 8 - 7
test/benchmark.php

@@ -23,13 +23,14 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/itopwebpage.class.inc.php');
-require_once('../application/wizardhelper.class.inc.php');
-require_once('../application/startup.inc.php');
-require_once('../application/loginwebpage.class.inc.php');
-require_once('../application/utils.inc.php');
-require_once('../setup/setuppage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/itopwebpage.class.inc.php');
+require_once(APPROOT.'/application/wizardhelper.class.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
+require_once(APPROOT.'/setup/setuppage.class.inc.php');
 
 //ini_set('memory_limit', '2048M');
 

+ 18 - 17
test/test.class.inc.php

@@ -24,28 +24,28 @@
  */
 
 
-require_once('../core/coreexception.class.inc.php');
-require_once('../core/attributedef.class.inc.php');
-require_once('../core/filterdef.class.inc.php');
-require_once('../core/stimulus.class.inc.php');
-require_once('../core/MyHelpers.class.inc.php');
+require_once(APPROOT.'/core/coreexception.class.inc.php');
+require_once(APPROOT.'/core/attributedef.class.inc.php');
+require_once(APPROOT.'/core/filterdef.class.inc.php');
+require_once(APPROOT.'/core/stimulus.class.inc.php');
+require_once(APPROOT.'/core/MyHelpers.class.inc.php');
 
-require_once('../core/expression.class.inc.php');
-require_once('../core/cmdbsource.class.inc.php');
-require_once('../core/sqlquery.class.inc.php');
+require_once(APPROOT.'/core/expression.class.inc.php');
+require_once(APPROOT.'/core/cmdbsource.class.inc.php');
+require_once(APPROOT.'/core/sqlquery.class.inc.php');
 
-require_once('../core/log.class.inc.php');
-require_once('../core/kpi.class.inc.php');
+require_once(APPROOT.'/core/log.class.inc.php');
+require_once(APPROOT.'/core/kpi.class.inc.php');
 
-require_once('../core/dbobject.class.php');
-require_once('../core/dbobjectsearch.class.php');
-require_once('../core/dbobjectset.class.php');
+require_once(APPROOT.'/core/dbobject.class.php');
+require_once(APPROOT.'/core/dbobjectsearch.class.php');
+require_once(APPROOT.'/core/dbobjectset.class.php');
 
-require_once('../application/cmdbabstract.class.inc.php');
+require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
 
-require_once('../core/userrights.class.inc.php');
+require_once(APPROOT.'/core/userrights.class.inc.php');
 
-require_once('../webservices/webservices.class.inc.php');
+require_once(APPROOT.'/webservices/webservices.class.inc.php');
 
 
 // Just to differentiate programmatically triggered exceptions and other kind of errors (usefull?)
@@ -405,7 +405,8 @@ abstract class TestBizModel extends TestHandler
 
 	protected function DoPrepare()
 	{
-		MetaModel::Startup($this->GetConfigFile());
+		$sConfigFile = APPROOT.$this->GetConfigFile();
+		MetaModel::Startup($sConfigFile);
 // #@# Temporary disabled by Romain
 //		MetaModel::CheckDefinitions();
 

+ 3 - 2
test/test.php

@@ -84,11 +84,12 @@ function DisplayEvents($aEvents, $sTitle)
 ///////////////////////////////////////////////////////////////////////////////
 
 
-require_once('../application/utils.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
 require_once('./test.class.inc.php');
 require_once('./testlist.inc.php');
 
-require_once('../core/cmdbobject.class.inc.php');
+require_once(APPROOT.'/core/cmdbobject.class.inc.php');
 
 $sTodo = utils::ReadParam("todo", "");
 if ($sTodo == '')

+ 32 - 9
test/testlist.inc.php

@@ -301,7 +301,7 @@ class TestGenericItoMyModel extends TestBizModelGeneric
 		return 'Generic RO test on '.self::GetConfigFile();
 	}
 
-	static public function GetConfigFile() {return '../config-test-mymodel.php';}
+	static public function GetConfigFile() {return '/config-test-mymodel.php';}
 }
 
 class TestGenericItopBigModel extends TestBizModelGeneric
@@ -311,7 +311,7 @@ class TestGenericItopBigModel extends TestBizModelGeneric
 		return 'Generic RO test on '.self::GetConfigFile();
 	}
 
-	static public function GetConfigFile() {return '../config-test-itopv06.php';}
+	static public function GetConfigFile() {return '/config-test-itopv06.php';}
 }
 
 class TestUserRightsMatrixItop extends TestUserRights
@@ -368,7 +368,7 @@ class TestMyBizModel extends TestBizModel
 		return 'Attempts various operations and build complex queries';
 	}
 	
-	static public function GetConfigFile() {return '../config-test-mymodel.php';}
+	static public function GetConfigFile() {return '/config-test-mymodel.php';}
 
 	function test_linksinfo()
 	{
@@ -689,7 +689,7 @@ class TestMyBizModel extends TestBizModel
 
 abstract class MyFarm extends TestBizModel
 {
-	static public function GetConfigFile() {return '../config-test-farm.php';}
+	static public function GetConfigFile() {return '/config-test-farm.php';}
 
 	protected function DoPrepare()
 	{
@@ -970,7 +970,7 @@ class TestBulkChangeOnFarm extends TestBizModel
 		return 'Bulk load';
 	}
 	
-	static public function GetConfigFile() {return '../config-test-farm.php';}
+	static public function GetConfigFile() {return '/config-test-farm.php';}
 
 	protected function DoPrepare()
 	{
@@ -1084,7 +1084,7 @@ class TestItopEfficiency extends TestBizModel
 		return 'Measure time to perform the queries';
 	}
 
-	static public function GetConfigFile() {return '../config-itop.php';}
+	static public function GetConfigFile() {return '/config-itop.php';}
 
 	protected function DoBenchmark($sOqlQuery)
 	{
@@ -1942,7 +1942,7 @@ class TestWebServicesDirect extends TestBizModel
 	static public function GetName() {return 'Test web services locally';}
 	static public function GetDescription() {return 'Invoke the service directly (troubleshooting)';}
 
-	static public function GetConfigFile() {return '../config-itop.php';}
+	static public function GetConfigFile() {return '/config-itop.php';}
 
 	protected function DoExecute()
 	{
@@ -1982,7 +1982,7 @@ class TestTriggerAndEmail extends TestBizModel
 	static public function GetName() {return 'Test trigger and email';}
 	static public function GetDescription() {return 'Create a trigger and an email, then activates the trigger';}
 
-	static public function GetConfigFile() {return '../config-itop.php';}
+	static public function GetConfigFile() {return '/config-itop.php';}
 
 	protected function CreateEmailSpec($oTrigger, $sStatus, $sTo, $sCC, $sTesterEmail)
 	{
@@ -2113,6 +2113,29 @@ class TestTriggerAndEmail extends TestBizModel
 	}
 }
 
+class TestDBProperties extends TestBizModel
+{
+	static public function GetName()
+	{
+		return 'Itop - DB Properties';
+	}
+
+	static public function GetDescription()
+	{
+		return 'Write and read a dummy property';
+	}
+
+	static public function GetConfigFile() {return '/config-itop.php';}
+
+	protected function DoExecute()
+	{
+		$sName = 'test';
+		DBProperty::SetProperty($sName, 'unix time:'.time(), 'means nothing', 'done with the automated test utility');
+		$sValue = DBProperty::GetProperty($sName);
+		echo "<p>Write... then read property <b>$sName</b>, found: '$sValue'</p>\n";
+	}
+}
+
 class TestCreateObjects extends TestBizModel
 {
 	static public function GetName()
@@ -2125,7 +2148,7 @@ class TestCreateObjects extends TestBizModel
 		return 'Create weird objects (reproduce a bug?)';
 	}
 
-	static public function GetConfigFile() {return '../config-itop.php';}
+	static public function GetConfigFile() {return '/config-itop.php';}
 
 	protected function DoExecute()
 	{

+ 10 - 9
webservices/backoffice.dataloader.php

@@ -29,10 +29,11 @@
  * 'file' string Name of the file to load
  */ 
 define('SAFE_MINIMUM_MEMORY', 256*1024*1024);
-require_once('../application/utils.inc.php');
-require_once("../application/nicewebpage.class.inc.php");
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/utils.inc.php');
+require_once(APPROOT."/application/nicewebpage.class.inc.php");
 // required because the class xmldataloader is reporting errors in the setup.log file
-require_once('../setup/setuppage.class.inc.php');
+require_once(APPROOT.'/setup/setuppage.class.inc.php');
 
 
 function SetMemoryLimit($oP)
@@ -71,13 +72,13 @@ function SetMemoryLimit($oP)
 //
 ////////////////////////////////////////////////////////////////////////////////
 
-require_once('../core/config.class.inc.php');
-require_once('../core/log.class.inc.php');
-require_once('../core/kpi.class.inc.php');
-require_once('../core/cmdbsource.class.inc.php');
-require_once('../setup/xmldataloader.class.inc.php');
+require_once(APPROOT.'/core/config.class.inc.php');
+require_once(APPROOT.'/core/log.class.inc.php');
+require_once(APPROOT.'/core/kpi.class.inc.php');
+require_once(APPROOT.'/core/cmdbsource.class.inc.php');
+require_once(APPROOT.'/setup/xmldataloader.class.inc.php');
 
-define('FINAL_CONFIG_FILE', '../config-itop.php');
+define('FINAL_CONFIG_FILE', APPROOT.'/config-itop.php');
 
 // Never cache this page
 header("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1

+ 3 - 2
webservices/check_sla_for_tickets.php

@@ -23,9 +23,10 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/startup.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 
 $oMyChange = new CMDBChange();

+ 3 - 2
webservices/createfrommail.php

@@ -50,8 +50,9 @@ define('DEFAULT_SUBSERVICE_ID', 12);
 define('DEFAULT_PRODUCT', 'Request via eMail');
 define('DEFAULT_WORKGROUP_ID', 5);
 
-require_once('../application/application.inc.php');
-require_once('../application/startup.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
 function GetSender($aHeaders)
 {

+ 7 - 6
webservices/export.php

@@ -23,14 +23,15 @@
  * @license     http://www.opensource.org/licenses/gpl-3.0.html LGPL
  */
 
-require_once('../application/application.inc.php');
-require_once('../application/nicewebpage.class.inc.php');
-require_once('../application/csvpage.class.inc.php');
-require_once('../application/xmlpage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/nicewebpage.class.inc.php');
+require_once(APPROOT.'/application/csvpage.class.inc.php');
+require_once(APPROOT.'/application/xmlpage.class.inc.php');
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
-require_once('../application/loginwebpage.class.inc.php');
+require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 
 $sOperation = utils::ReadParam('operation', 'menu');

+ 7 - 6
webservices/import.php

@@ -33,12 +33,13 @@
 // - not outputing xml when a wrong input is given (class, attribute names)
 //
 
-require_once('../application/application.inc.php');
-require_once('../application/webpage.class.inc.php');
-require_once('../application/csvpage.class.inc.php');
-require_once('../application/clipage.class.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/webpage.class.inc.php');
+require_once(APPROOT.'/application/csvpage.class.inc.php');
+require_once(APPROOT.'/application/clipage.class.inc.php');
 
-require_once('../application/startup.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
 class BulkLoadException extends Exception
 {
@@ -230,7 +231,7 @@ if (utils::IsModeCLI())
 else
 {
 	$_SESSION['login_mode'] = 'basic';
-	require_once('../application/loginwebpage.class.inc.php');
+	require_once(APPROOT.'/application/loginwebpage.class.inc.php');
 	LoginWebPage::DoLogin(); // Check user rights and prompt if needed
 
 	$oP = new CSVPage("iTop - Bulk import");

+ 3 - 2
webservices/soapserver.php

@@ -26,8 +26,9 @@
 // Important note: if some required includes are missing, this might result
 // in the error "looks like we got no XML document"...
 
-require_once('../application/application.inc.php');
-require_once('../application/startup.inc.php');
+require_once('../approot.inc.php');
+require_once(APPROOT.'/application/application.inc.php');
+require_once(APPROOT.'/application/startup.inc.php');
 
 require('./webservices.class.inc.php');
 

+ 1 - 1
webservices/webservices.class.inc.php

@@ -24,7 +24,7 @@
  */
 
 
-require_once('../webservices/itopsoaptypes.class.inc.php');
+require_once(APPROOT.'/webservices/itopsoaptypes.class.inc.php');
 
 /**
  * Generic response of iTop SOAP services