From 1e151d9864ef18cf78c8149837f9fc608a429404 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@users.sourceforge.net> Date: Sun, 19 Dec 2010 02:42:53 +0000 Subject: [PATCH] Fix: Fix a lot of regression. There still a lot of new bugs to fix (like compatibility through proxy, or restore performance by avoiding huge number of fil_exists). --- htdocs/admin/boxes.php | 28 ++------- htdocs/admin/modules.php | 4 +- htdocs/boxes.php | 23 ++------ htdocs/compta/facture.php | 12 +--- htdocs/core/class/commonobject.class.php | 58 +++++-------------- htdocs/core/class/conf.class.php | 2 +- .../includes/menus/standard/auguria.lib.php | 8 +-- htdocs/includes/menus/standard/eldy.lib.php | 8 +-- htdocs/install/inc.php | 2 +- htdocs/lib/functions.lib.php | 12 ++++ htdocs/lib/security.lib.php | 9 +-- htdocs/main.inc.php | 11 +--- htdocs/master.inc.php | 2 +- htdocs/user/passwordforgotten.php | 10 +--- 14 files changed, 55 insertions(+), 134 deletions(-) diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 1d07a786044..fe9547075b5 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -279,23 +279,15 @@ if ($resql) { $boxname = $regs[1]; $module = $regs[2]; - - if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php")) - { - $sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"; - } - else - { - $sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php"; - } + $sourcefile = "/".$module."/inc/boxes/".$boxname.".php"; } else { $boxname=preg_replace('/.php$/i','',$obj->file); - $sourcefile = DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php"; + $sourcefile = "/includes/boxes/".$boxname.".php"; } - include_once($sourcefile); + dol_include_once($sourcefile); $box=new $boxname($db,$obj->note); // if (in_array($obj->rowid, $actives) && $box->box_multiple <> 1) @@ -390,23 +382,15 @@ if ($resql) { $boxname = $regs[1]; $module = $regs[2]; - - if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php")) - { - $sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"; - } - else - { - $sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php"; - } + $sourcefile = "/".$module."/inc/boxes/".$boxname.".php"; } else { $boxname=preg_replace('/.php$/i','',$obj->file); - $sourcefile = DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php"; + $sourcefile = "/includes/boxes/".$boxname.".php"; } - include_once($sourcefile); + dol_include_once($sourcefile); $box=new $boxname($db,$obj->note); if (preg_match('/^([^@]+)@([^@]+)$/i',$box->boximg)) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 86c6b0aefa8..80601ac6547 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -376,7 +376,7 @@ if ($mode != 4) { if (preg_match('/^([^@]+)@([^@]+)$/i',$urlpage,$regs)) { - if (file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1])) + if (! defined('DOL_URL_EXTMODULE') || ! DOL_URL_EXTMODULE || file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1])) { print '<a href="'.DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1].'" title="'.$langs->trans("Setup").'">'.img_picto($langs->trans("Setup"),"setup").'</a> '; } @@ -395,7 +395,7 @@ if ($mode != 4) } else if (preg_match('/^([^@]+)@([^@]+)$/i',$objMod->config_page_url,$regs)) { - if (file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1])) + if (! defined('DOL_URL_EXTMODULE') || ! DOL_URL_EXTMODULE || file_exists(DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1])) { print '<td align="right" valign="top"><a href="'.DOL_URL_ROOT.'/'.$regs[2].'/admin/'.$regs[1].'" title="'.$langs->trans("Setup").'">'.img_picto($langs->trans("Setup"),"setup").'</a></td>'; } diff --git a/htdocs/boxes.php b/htdocs/boxes.php index 1f7ae1eac64..441c73f5b0f 100644 --- a/htdocs/boxes.php +++ b/htdocs/boxes.php @@ -220,14 +220,7 @@ class InfoBox $boxname = $regs[1]; $module = $regs[2]; - if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php")) - { - $sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"; - } - else - { - $sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php"; - } + dol_include_once("/".$module."/inc/boxes/".$boxname.".php"); } else { @@ -288,23 +281,15 @@ class InfoBox { $boxname = $regs[1]; $module = $regs[2]; - - if (file_exists(DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php")) - { - $sourcefile = DOL_DOCUMENT_ROOT."/".$module."/inc/boxes/".$boxname.".php"; - } - else - { - $sourcefile = DOL_DOCUMENT_EXTMODULE."/".$module."/inc/boxes/".$boxname.".php"; - } + $sourcefile = "/".$module."/inc/boxes/".$boxname.".php"; } else { $boxname=preg_replace('/.php$/i','',$obj->file); - $sourcefile = DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php"; + $sourcefile = "/includes/boxes/".$boxname.".php"; } - include_once($sourcefile); + dol_include_once($sourcefile); $box=new $boxname($db,$obj->note); $box->rowid=$obj->rowid; diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 6499e99025c..e9ffe392d4d 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -687,11 +687,7 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer) if ($facid > 0) { - if (file_exists(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php')) { - require_once(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php'); - } else { - require_once(DOL_DOCUMENT_EXTMODULE.'/'.$element.'/class/'.$subelement.'.class.php'); - } + dol_include_once('/'.$element.'/class/'.$subelement.'.class.php'); $classname = ucfirst($subelement); $srcobject = new $classname($db); @@ -1397,11 +1393,7 @@ if ($_GET['action'] == 'create') if ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; } if ($element == 'contract') { $element = $subelement = 'contrat'; } - if (file_exists(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php')) { - require_once(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php'); - } else { - require_once(DOL_DOCUMENT_EXTMODULE.'/'.$element.'/class/'.$subelement.'.class.php'); - } + dol_include_once('/'.$element.'/class/'.$subelement.'.class.php'); $classname = ucfirst($subelement); $objectsrc = new $classname($db); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b367d9c3fd4..5240a60eb42 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1284,38 +1284,22 @@ class CommonObject $daofile = 'dao_'.$module.'.class.php'; $pathroot = ''; - // Include class and library of thirdparty module - if (file_exists(DOL_DOCUMENT_ROOT.$path.$actionfile) && file_exists(DOL_DOCUMENT_ROOT.$path.$daofile)) - { - $pathroot = DOL_DOCUMENT_ROOT; - } - else if (file_exists(DOL_DOCUMENT_EXTMODULE.$path.$actionfile) && file_exists(DOL_DOCUMENT_EXTMODULE.$path.$daofile)) - { - $pathroot = DOL_DOCUMENT_EXTMODULE; - } - - if ($pathroot) - { - // Include actions class (controller) - require_once($pathroot.$path.$actionfile); + // Include actions class (controller) + dol_include_once($path.$actionfile); - // Include dataservice class (model) - require_once($pathroot.$path.$daofile); + // Include dataservice class (model) + dol_include_once($path.$daofile); - // Instantiate actions class (controller) - $controlclassname = 'Actions'.ucfirst($module); - $objModule = new $controlclassname($this->db); - $this->hooks[$objModule->module_number] = $objModule; + // Instantiate actions class (controller) + $controlclassname = 'Actions'.ucfirst($module); + $objModule = new $controlclassname($this->db); + $this->hooks[$objModule->module_number] = $objModule; - // Instantiate dataservice class (model) - $modelclassname = 'Dao'.ucfirst($module); - $this->hooks[$objModule->module_number]->object = new $modelclassname($this->db); - } + // Instantiate dataservice class (model) + $modelclassname = 'Dao'.ucfirst($module); + $this->hooks[$objModule->module_number]->object = new $modelclassname($this->db); - if (file_exists($pathroot.'/'.$module.'/lib/'.$module.'.lib.php')) - { - require_once($pathroot.'/'.$module.'/lib/'.$module.'.lib.php'); - } + dol_include_once('/'.$module.'/lib/'.$module.'.lib.php'); } } } @@ -1388,24 +1372,10 @@ class CommonObject //print $classfile." - ".$classpath." - ".$tplpath; if(!class_exists($classname)) { - if (file_exists(DOL_DOCUMENT_ROOT."/".$classpath."/".$classfile.".class.php")) - { - require(DOL_DOCUMENT_ROOT."/".$classpath."/".$classfile.".class.php"); - } - else - { - require(DOL_DOCUMENT_EXTMODULE."/".$classpath."/".$classfile.".class.php"); - } + dol_include_once("/".$classpath."/".$classfile.".class.php"); } $linkedObjectBlock = new $classname($this->db); - if (file_exists(DOL_DOCUMENT_ROOT.'/'.$tplpath.'/tpl/linkedobjectblock.tpl.php')) - { - include(DOL_DOCUMENT_ROOT.'/'.$tplpath.'/tpl/linkedobjectblock.tpl.php'); - } - else - { - include(DOL_DOCUMENT_EXTMODULE.'/'.$tplpath.'/tpl/linkedobjectblock.tpl.php'); - } + dol_include_once('/'.$tplpath.'/tpl/linkedobjectblock.tpl.php'); return $num; } diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 623504e8a88..1d4a1abdf42 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -143,7 +143,7 @@ class Conf { $modulename = strtolower($reg[1]); if ($value == 1) $this->triggers_modules[] = DOL_DOCUMENT_ROOT.'/'.$modulename.'/inc/triggers/'; - else if ($value == 2) $this->triggers_modules[] = DOL_DOCUMENT_EXTMODULE.'/'.$modulename.'/inc/triggers/'; + else if ($value == 2) $this->triggers_modules[] = DOL_DOCUMENT_ROOT_ALT.'/'.$modulename.'/inc/triggers/'; } // If this is constant for login method activated by a module elseif (preg_match('/^MAIN_MODULE_([A-Z_]+)_LOGIN_METHOD$/i',$key,$reg)) diff --git a/htdocs/includes/menus/standard/auguria.lib.php b/htdocs/includes/menus/standard/auguria.lib.php index 514e6089c02..313e5df77b6 100644 --- a/htdocs/includes/menus/standard/auguria.lib.php +++ b/htdocs/includes/menus/standard/auguria.lib.php @@ -64,8 +64,8 @@ function print_auguria_menu($db,$atarget,$type_user) else { preg_match('/^([^<]+\.php)/i',$tabMenu[$i]['url'],$regs); - if (file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_ROOT.$tabMenu[$i]['url']; - else $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url']; + $url=DOL_URL_ROOT.$tabMenu[$i]['url']; + if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$tabMenu[$i]['url'])) $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url']; if (! preg_match('/\?/',$url)) $url.='?'; else $url.='&'; if (! preg_match('/mainmenu/i',$url) || ! preg_match('/leftmenu/i',$url)) @@ -278,8 +278,8 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after) // Add mainmenu in GET url. This make to go back on correct menu even when using Back on browser. preg_match('/^([^<]+\.php)/i',$menu_array[$i]['url'],$regs); - if (file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_ROOT.$menu_array[$i]['url']; - else $url=DOL_URL_EXTMODULE.$menu_array[$i]['url']; + $url=DOL_URL_ROOT.$menu_array[$i]['url']; + if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_EXTMODULE.$menu_array[$i]['url']; if (! preg_match('/mainmenu=/i',$menu_array[$i]['url'])) { diff --git a/htdocs/includes/menus/standard/eldy.lib.php b/htdocs/includes/menus/standard/eldy.lib.php index aa49c3877cf..3942082e26d 100644 --- a/htdocs/includes/menus/standard/eldy.lib.php +++ b/htdocs/includes/menus/standard/eldy.lib.php @@ -453,8 +453,8 @@ function print_eldy_menu($db,$atarget,$type_user) } else { - if (file_exists(DOL_DOCUMENT_ROOT.$tabMenu[$i]['url'])) $url=DOL_URL_ROOT.$tabMenu[$i]['url']; - else $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url']; + $url=DOL_URL_ROOT.$tabMenu[$i]['url']; + if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$tabMenu[$i]['url'])) $url=DOL_URL_EXTMODULE.$tabMenu[$i]['url']; if (! preg_match('/\?/',$url)) $url.='?'; else $url.='&'; if (! preg_match('/mainmenu/i',$url) || ! preg_match('/leftmenu/i',$url)) @@ -1387,8 +1387,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after) // For external modules preg_match('/^([^<]+\.php)/i',$menu_array[$i]['url'],$regs); - if (file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_ROOT.$menu_array[$i]['url']; - else $url=DOL_URL_EXTMODULE.$menu_array[$i]['url']; + $url=DOL_URL_ROOT.$menu_array[$i]['url']; + if (defined('DOL_URL_EXTMODULE') && DOL_URL_EXTMODULE && ! file_exists(DOL_DOCUMENT_ROOT.$regs[1])) $url=DOL_URL_EXTMODULE.$menu_array[$i]['url']; // Menu niveau 0 if ($menu_array[$i]['level'] == 0) diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php index 61d8d1d9ec3..88d14386383 100644 --- a/htdocs/install/inc.php +++ b/htdocs/install/inc.php @@ -125,7 +125,7 @@ define('MAIN_DB_PREFIX',(isset($dolibarr_main_db_prefix)?$dolibarr_main_db_prefi define('DOL_DATA_ROOT',(isset($dolibarr_main_data_root)?$dolibarr_main_data_root:'')); define('DOL_CLASS_PATH', 'class/'); // Filsystem path to class dir -define('DOL_DOCUMENT_EXTMODULE', (isset($dolibarr_main_document_root_alt)?$dolibarr_main_document_root_alt:'')); // Filesystem path to external modules dir +define('DOL_DOCUMENT_ROOT_ALT', (isset($dolibarr_main_document_root_alt)?$dolibarr_main_document_root_alt:'')); // Filesystem path to external root dir (external modules) define('DOL_MAIN_URL_ROOT', (isset($dolibarr_main_url_root)?$dolibarr_main_url_root:'')); // URL relative root $uri=preg_replace('/^http(s?):\/\//i','',constant('DOL_MAIN_URL_ROOT')); // $uri contains url without http* $suburi = strstr ($uri, '/'); // $suburi contains url without domain diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php index 9fe2dfd07a5..a436021aa33 100644 --- a/htdocs/lib/functions.lib.php +++ b/htdocs/lib/functions.lib.php @@ -62,6 +62,18 @@ function GETPOST($paramname,$check='',$method=0) return $out; } +/** + * Make an include_once using default root and alternate root if it fails. + * @param relpath Relative path to file (Ie: mydir/myfile, ../myfile, ...) + * @return int Result + */ +function dol_include_once($relpath) +{ + $res=@include_once(DOL_DOCUMENT_ROOT.$relpath); + if (! $res && defined('DOL_DOCUMENT_ROOT_ALT')) $res=@include_once(DOL_DOCUMENT_ROOT_ALT.$relpath); + return $res; +} + /** * Create a clone of instance of object (new instance with same properties) * This function works for both PHP4 and PHP5. diff --git a/htdocs/lib/security.lib.php b/htdocs/lib/security.lib.php index a022a2e4f6f..059c64f4ca6 100644 --- a/htdocs/lib/security.lib.php +++ b/htdocs/lib/security.lib.php @@ -159,14 +159,7 @@ function dol_loginfunction($langs,$conf,$mysoc) { $rowspan++; - if(file_exists(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php')) - { - $res=@include_once(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php'); - } - else - { - $res=@include_once(DOL_DOCUMENT_EXTMODULE.'/multicompany/class/actions_multicompany.class.php'); - } + $res=dol_include_once('/multicompany/class/actions_multicompany.class.php'); if ($res) { $mc = new ActionsMulticompany($db); diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 1b803046dd5..dd70e99e091 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1068,15 +1068,8 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a { if ($user->admin && ! $user->entity) { - if(file_exists(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php')) - { - $res=@include_once(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php'); - } - else - { - $res=@include_once(DOL_DOCUMENT_EXTMODULE.'/multicompany/class/actions_multicompany.class.php'); - } - + $res=@dol_include_once('/multicompany/class/actions_multicompany.class.php'); + if ($res) { //$mc = new ActionsMulticompany($db); diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index a1fce0a1360..aae5f3b937a 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -104,7 +104,7 @@ if (empty($dolibarr_main_data_root)) define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root); // Filesystem core php (htdocs) define('DOL_DATA_ROOT', $dolibarr_main_data_root); // Filesystem data (documents) define('DOL_CLASS_PATH', 'class/'); // Filesystem path to class dir -define('DOL_DOCUMENT_EXTMODULE', $dolibarr_main_document_root_alt); // Filesystem path to external modules dir +define('DOL_DOCUMENT_ROOT_ALT', $dolibarr_main_document_root_alt); // Filesystem path to external modules dir // If dolibarr_main_url_root = auto (Hidden feature for developers only), we try to forge it. if ($dolibarr_main_url_root == 'auto' && ! empty($_SERVER["SCRIPT_URL"]) && ! empty($_SERVER["SCRIPT_URI"])) { diff --git a/htdocs/user/passwordforgotten.php b/htdocs/user/passwordforgotten.php index fc2b07f21da..6b65b1163cd 100644 --- a/htdocs/user/passwordforgotten.php +++ b/htdocs/user/passwordforgotten.php @@ -216,15 +216,7 @@ if (! empty($conf->global->MAIN_MODULE_MULTICOMPANY) && ! $disabled) { global $db; - if(file_exists(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php')) - { - $res=@include_once(DOL_DOCUMENT_ROOT.'/multicompany/class/actions_multicompany.class.php'); - } - else - { - $res=@include_once(DOL_DOCUMENT_EXTMODULE.'/multicompany/class/actions_multicompany.class.php'); - } - + $res=dol_include_once('/multicompany/class/actions_multicompany.class.php'); if ($res) { $mc = new ActionsMulticompany($db); -- GitLab