2004-10-19 22:35:36 +02:00
< ? php
2007-04-07 13:52:16 +02:00
/* Copyright ( C ) 2003 - 2007 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2006-07-15 20:29:46 +02:00
* Copyright ( C ) 2003 Xavier Dutoit < doli @ sydesy . com >
2020-05-24 20:04:26 +02:00
* Copyright ( C ) 2004 - 2020 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2005 - 2017 Regis Houssin < regis . houssin @ inodbox . com >
2007-04-05 09:11:17 +02:00
* Copyright ( C ) 2006 Jean Heimburger < jean @ tiaris . info >
2006-07-15 20:29:46 +02:00
*
2003-06-24 16:11:21 +02:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2003-06-24 16:11:21 +02:00
* ( at your option ) any later version .
*
* This program 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2003-06-24 16:11:21 +02:00
*/
2005-04-02 16:29:10 +02:00
/**
2010-06-08 01:52:43 +02:00
* \file htdocs / core / class / conf . class . php
2008-11-28 00:24:50 +01:00
* \ingroup core
2011-07-30 12:23:24 +02:00
* \brief File of class to manage storage of current setup
* Config is stored into file conf . php
2008-11-28 00:24:50 +01:00
*/
2003-09-12 14:50:22 +02:00
2003-09-12 19:29:16 +02:00
2006-07-15 20:29:46 +02:00
/**
2012-02-19 17:12:17 +01:00
* Class to stock current configuration
2008-11-28 00:24:50 +01:00
*/
2016-03-25 15:34:37 +01:00
class Conf
2003-06-24 16:11:21 +02:00
{
2021-06-21 20:50:56 +02:00
/**
* @ var Object Associative array with properties found in conf file
*/
2020-10-31 14:32:18 +01:00
public $file ;
/**
* @ var Object Associative array with some properties -> type , -> db , ...
*/
public $db ;
//! To store properties found into database
public $global ;
//! To store browser info
public $browser ;
//! To store if javascript/ajax is enabked
public $use_javascript_ajax ;
//! To store if javascript/ajax is enabked
public $disable_compute ;
2018-10-05 13:58:38 +02:00
//! Used to store current currency (ISO code like 'USD', 'EUR', ...)
2011-12-03 20:21:45 +01:00
public $currency ;
2020-12-23 23:06:34 +01:00
2009-11-09 17:56:30 +01:00
//! Used to store current css (from theme)
2019-11-13 19:37:08 +01:00
public $theme ; // Contains current theme ("eldy", "auguria", ...)
public $css ; // Contains full path of css page ("/theme/eldy/style.css.php", ...)
2020-12-23 23:06:34 +01:00
2020-10-31 14:32:18 +01:00
//! Used to store current menu handler
2013-01-17 18:39:15 +01:00
public $standard_menu ;
2020-10-31 14:32:18 +01:00
// List of activated modules
2021-06-21 20:50:56 +02:00
public $modules ;
public $modules_parts ;
2020-10-31 14:32:18 +01:00
2021-03-02 16:13:00 +01:00
// An array to store cache results ->cache['nameofcache']=...
2021-06-21 20:50:56 +02:00
public $cache ;
2021-03-02 16:13:00 +01:00
2021-06-21 20:50:56 +02:00
/**
* @ var string []
*/
2020-10-31 14:32:18 +01:00
public $logbuffer = array ();
/**
* @ var LogHandlerInterface []
*/
public $loghandlers = array ();
//! To store properties of multi-company
public $multicompany ;
2012-02-19 17:12:17 +01:00
//! Used to store running instance for multi-company (default 1)
2019-11-13 19:37:08 +01:00
public $entity = 1 ;
2012-02-19 17:12:17 +01:00
//! Used to store list of entities to use for each element
2019-11-13 19:37:08 +01:00
public $entities = array ();
2012-02-19 17:12:17 +01:00
2019-11-13 19:37:08 +01:00
public $dol_hide_topmenu ; // Set if we force param dol_hide_topmenu into login url
public $dol_hide_leftmenu ; // Set if we force param dol_hide_leftmenu into login url
public $dol_optimize_smallscreen ; // Set if we force param dol_optimize_smallscreen into login url or if browser is smartphone
public $dol_no_mouse_hover ; // Set if we force param dol_no_mouse_hover into login url or if browser is smartphone
2021-02-19 15:37:42 +01:00
public $dol_use_jmobile ; // Set if we force param dol_use_jmobile into login url. 0=default, 1=to say we use app from a webview app, 2=to say we use app from a webview app and keep ajax
2012-02-19 17:12:17 +01:00
2020-12-23 23:06:34 +01:00
public $liste_limit ;
2021-01-03 18:42:45 +01:00
public $tzuserinputkey = 'tzserver' ; // Use 'tzuserrel' to always store date in GMT and show date in time zone of user.
2010-10-03 17:42:01 +02:00
2009-05-08 04:39:10 +02:00
/**
* Constructor
*/
2019-02-27 20:45:07 +01:00
public function __construct ()
2009-05-08 04:39:10 +02:00
{
2014-05-04 17:38:26 +02:00
// Properly declare multi-modules objects.
2019-11-13 19:37:08 +01:00
$this -> file = new stdClass ();
$this -> db = new stdClass ();
2021-06-21 20:50:56 +02:00
//! Charset for HTML output and for storing data in memory
$this -> file -> character_set_client = 'UTF-8' ; // UTF-8, ISO-8859-1
// Common objects that are not modules
2019-11-13 19:37:08 +01:00
$this -> mycompany = new stdClass ();
2021-06-21 20:50:56 +02:00
$this -> admin = new stdClass ();
$this -> medias = new stdClass ();
$this -> global = new stdClass ();
2012-04-10 12:38:10 +02:00
2021-11-18 19:25:07 +01:00
// Common objects that are not modules and set by the main and not into the this->setValues()
$this -> browser = new stdClass ();
2021-11-18 19:27:40 +01:00
// Common arrays
2021-06-21 20:50:56 +02:00
$this -> cache = array ();
$this -> modules = array ();
$this -> modules_parts = array (
'css' => array (),
'js' => array (),
'tabs' => array (),
'triggers' => array (),
'login' => array (),
'substitutions' => array (),
'menus' => array (),
'theme' => array (),
'sms' => array (),
'tpl' => array (),
'barcode' => array (),
'models' => array (),
'societe' => array (),
'hooks' => array (),
'dir' => array (),
'syslog' => array ()
);
2014-05-04 17:38:26 +02:00
2021-06-23 10:42:27 +02:00
// First level object that are modules.
2014-05-04 17:38:26 +02:00
// TODO Remove this part.
2021-06-21 20:50:56 +02:00
$this -> syslog = new stdClass ();
$this -> multicompany = new stdClass ();
2019-11-13 19:37:08 +01:00
$this -> expedition_bon = new stdClass ();
2020-10-06 12:05:24 +02:00
$this -> delivery_note = new stdClass ();
2019-11-13 19:37:08 +01:00
$this -> fournisseur = new stdClass ();
2013-01-19 14:32:37 +01:00
$this -> product = new stdClass ();
$this -> service = new stdClass ();
$this -> contrat = new stdClass ();
$this -> actions = new stdClass ();
2019-11-14 12:44:15 +01:00
$this -> agenda = new stdClass ();
2019-11-13 19:37:08 +01:00
$this -> commande = new stdClass ();
$this -> propal = new stdClass ();
2013-01-19 14:32:37 +01:00
$this -> facture = new stdClass ();
$this -> contrat = new stdClass ();
2021-06-23 10:42:27 +02:00
$this -> user = new stdClass ();
2013-01-19 14:32:37 +01:00
$this -> adherent = new stdClass ();
2019-11-13 19:37:08 +01:00
$this -> bank = new stdClass ();
2013-01-19 14:32:37 +01:00
$this -> notification = new stdClass ();
2019-11-13 19:37:08 +01:00
$this -> mailing = new stdClass ();
2018-04-13 11:20:21 +02:00
$this -> expensereport = new stdClass ();
$this -> productbatch = new stdClass ();
2009-05-08 04:39:10 +02:00
}
2021-06-21 16:38:36 +02:00
/**
2021-11-18 19:25:07 +01:00
* Load setup values into conf object ( read llx_const ) for a specified entity
2022-03-07 19:18:32 +01:00
* Note that this -> db -> xxx , this -> file -> xxx and this -> multicompany have been already loaded when setEntityValues is called .
2021-06-21 16:38:36 +02:00
*
2021-12-02 16:07:33 +01:00
* @ param DoliDB $db Database handler
2021-06-21 16:38:36 +02:00
* @ param int $entity Entity to get
* @ return int < 0 if KO , >= 0 if OK
*/
2021-12-02 16:07:33 +01:00
public function setEntityValues ( $db , $entity )
2021-06-21 16:38:36 +02:00
{
2021-10-18 10:10:31 +02:00
if ( $this -> entity != $entity ) {
2021-11-18 19:25:07 +01:00
// If we ask to reload setup for a new entity
2021-10-18 10:10:31 +02:00
$this -> entity = $entity ;
2021-12-02 16:07:33 +01:00
return $this -> setValues ( $db );
2021-10-18 10:10:31 +02:00
}
2021-10-19 17:34:03 +02:00
return 0 ;
2021-06-21 16:38:36 +02:00
}
2007-04-07 13:52:16 +02:00
2007-10-22 01:04:06 +02:00
/**
2019-02-27 23:55:18 +01:00
* Load setup values into conf object ( read llx_const )
2021-06-21 20:50:56 +02:00
* Note that this -> db -> xxx , this -> file -> xxx have been already set when setValues is called .
2011-11-04 09:09:53 +01:00
*
2019-02-27 23:55:18 +01:00
* @ param DoliDB $db Database handler
* @ return int < 0 if KO , >= 0 if OK
2009-08-30 03:39:40 +02:00
*/
2019-02-27 20:45:07 +01:00
public function setValues ( $db )
2007-10-22 01:04:06 +02:00
{
2011-12-03 20:21:45 +01:00
dol_syslog ( get_class ( $this ) . " ::setValues " );
2009-05-07 17:37:47 +02:00
2021-06-21 16:38:36 +02:00
// Unset all old modules values
if ( ! empty ( $this -> modules )) {
foreach ( $this -> modules as $m ) {
if ( isset ( $this -> $m )) unset ( $this -> $m );
}
}
2021-11-18 19:25:07 +01:00
// Common objects that are not modules
$this -> mycompany = new stdClass ();
$this -> admin = new stdClass ();
$this -> medias = new stdClass ();
$this -> global = new stdClass ();
// Common objects that are not modules and set by the main and not into the this->setValues()
//$this->browser = new stdClass(); // This is set by main and not into this setValues(), so we keep it intact.
2021-06-21 16:38:36 +02:00
// First level object
// TODO Remove this part.
2021-11-18 19:25:07 +01:00
$this -> syslog = new stdClass ();
$this -> expedition_bon = new stdClass ();
$this -> delivery_note = new stdClass ();
$this -> fournisseur = new stdClass ();
2021-06-21 16:38:36 +02:00
$this -> product = new stdClass ();
$this -> service = new stdClass ();
$this -> contrat = new stdClass ();
$this -> actions = new stdClass ();
$this -> agenda = new stdClass ();
2021-11-18 19:25:07 +01:00
$this -> commande = new stdClass ();
$this -> propal = new stdClass ();
2021-06-21 16:38:36 +02:00
$this -> facture = new stdClass ();
$this -> contrat = new stdClass ();
2021-11-18 19:25:07 +01:00
$this -> user = new stdClass ();
2021-06-21 16:38:36 +02:00
$this -> adherent = new stdClass ();
2021-11-18 19:25:07 +01:00
$this -> bank = new stdClass ();
2021-06-21 16:38:36 +02:00
$this -> notification = new stdClass ();
2021-11-18 19:25:07 +01:00
$this -> mailing = new stdClass ();
2021-06-21 16:38:36 +02:00
$this -> expensereport = new stdClass ();
$this -> productbatch = new stdClass ();
2021-11-18 19:25:07 +01:00
2021-11-18 19:27:40 +01:00
// Common arrays
2021-11-18 19:25:07 +01:00
$this -> cache = array ();
2021-06-21 16:38:36 +02:00
$this -> modules = array ();;
$this -> modules_parts = array (
'css' => array (),
'js' => array (),
'tabs' => array (),
'triggers' => array (),
'login' => array (),
'substitutions' => array (),
'menus' => array (),
'theme' => array (),
'sms' => array (),
'tpl' => array (),
'barcode' => array (),
'models' => array (),
'societe' => array (),
'hooks' => array (),
'dir' => array (),
'syslog' => array (),
);
2021-06-26 01:46:14 +02:00
if ( ! is_null ( $db ) && is_object ( $db )) {
2021-06-23 10:42:27 +02:00
// Define all global constants into $this->global->key=value
$sql = " SELECT " . $db -> decrypt ( 'name' ) . " as name, " ;
$sql .= " " . $db -> decrypt ( 'value' ) . " as value, entity " ;
2022-01-21 16:57:57 +01:00
$sql .= " FROM " . $db -> prefix () . " const " ;
2021-06-23 10:42:27 +02:00
$sql .= " WHERE entity IN (0, " . $this -> entity . " ) " ;
$sql .= " ORDER BY entity " ; // This is to have entity 0 first, then entity 1 that overwrite.
$resql = $db -> query ( $sql );
if ( $resql ) {
$i = 0 ;
$numr = $db -> num_rows ( $resql );
while ( $i < $numr ) {
$objp = $db -> fetch_object ( $resql );
$key = $objp -> name ;
$value = $objp -> value ;
if ( $key ) {
// Allow constants values to be overridden by environment variables
if ( isset ( $_SERVER [ 'DOLIBARR_' . $key ])) {
$value = $_SERVER [ 'DOLIBARR_' . $key ];
} elseif ( isset ( $_ENV [ 'DOLIBARR_' . $key ])) {
$value = $_ENV [ 'DOLIBARR_' . $key ];
}
2020-04-01 22:11:18 +02:00
2021-06-23 10:42:27 +02:00
//if (! defined("$key")) define("$key", $value); // In some cases, the constant might be already forced (Example: SYSLOG_HANDLERS during install)
$this -> global -> $key = $value ;
if ( $value && strpos ( $key , 'MAIN_MODULE_' ) === 0 ) {
$reg = array ();
// If this is constant for a new tab page activated by a module. It initializes modules_parts['tabs'].
if ( preg_match ( '/^MAIN_MODULE_([0-9A-Z_]+)_TABS_/i' , $key )) {
$partname = 'tabs' ;
$params = explode ( ':' , $value , 2 );
if ( ! is_array ( $this -> modules_parts [ $partname ])) {
$this -> modules_parts [ $partname ] = array ();
}
$this -> modules_parts [ $partname ][ $params [ 0 ]][] = $value ; // $value may be a string or an array
} elseif ( preg_match ( '/^MAIN_MODULE_([0-9A-Z_]+)_([A-Z]+)$/i' , $key , $reg )) {
// If this is constant for all generic part activated by a module. It initializes
// modules_parts['login'], modules_parts['menus'], modules_parts['substitutions'], modules_parts['triggers'], modules_parts['tpl'],
// modules_parts['models'], modules_parts['theme']
// modules_parts['sms'],
2021-09-02 13:25:00 +02:00
// modules_parts['css'], modules_parts['js'],...
2021-06-23 10:42:27 +02:00
$modulename = strtolower ( $reg [ 1 ]);
$partname = strtolower ( $reg [ 2 ]);
if ( ! isset ( $this -> modules_parts [ $partname ]) || ! is_array ( $this -> modules_parts [ $partname ])) {
$this -> modules_parts [ $partname ] = array ();
}
2021-09-02 13:25:00 +02:00
2021-06-23 10:42:27 +02:00
$arrValue = json_decode ( $value , true );
2021-09-02 13:25:00 +02:00
if ( is_array ( $arrValue )) {
$newvalue = $arrValue ;
2021-06-23 10:42:27 +02:00
} elseif ( in_array ( $partname , array ( 'login' , 'menus' , 'substitutions' , 'triggers' , 'tpl' ))) {
2021-09-02 13:25:00 +02:00
$newvalue = '/' . $modulename . '/core/' . $partname . '/' ;
2021-06-23 10:42:27 +02:00
} elseif ( in_array ( $partname , array ( 'models' , 'theme' ))) {
2021-09-02 13:25:00 +02:00
$newvalue = '/' . $modulename . '/' ;
2021-06-23 10:42:27 +02:00
} elseif ( in_array ( $partname , array ( 'sms' ))) {
2021-09-02 13:25:00 +02:00
$newvalue = '/' . $modulename . '/' ;
2021-06-23 10:42:27 +02:00
} elseif ( $value == 1 ) {
2021-09-02 13:25:00 +02:00
$newvalue = '/' . $modulename . '/core/modules/' . $partname . '/' ; // ex: partname = societe
} else {
$newvalue = $value ;
}
if ( ! empty ( $newvalue )) {
$this -> modules_parts [ $partname ] = array_merge ( $this -> modules_parts [ $partname ], array ( $modulename => $newvalue )); // $value may be a string or an array
2021-06-23 10:42:27 +02:00
}
} elseif ( preg_match ( '/^MAIN_MODULE_([0-9A-Z_]+)$/i' , $key , $reg )) {
// If this is a module constant (must be at end)
$modulename = strtolower ( $reg [ 1 ]);
if ( $modulename == 'propale' ) {
$modulename = 'propal' ;
}
if ( $modulename == 'supplierproposal' ) {
$modulename = 'supplier_proposal' ;
}
if ( ! isset ( $this -> $modulename ) || ! is_object ( $this -> $modulename )) {
$this -> $modulename = new stdClass ();
}
$this -> $modulename -> enabled = true ;
$this -> modules [] = $modulename ; // Add this module in list of enabled modules
2021-02-23 22:03:23 +01:00
}
2009-04-30 01:39:04 +02:00
}
2008-11-28 00:02:49 +01:00
}
2021-06-23 10:42:27 +02:00
$i ++ ;
2007-10-29 13:47:43 +01:00
}
2016-08-16 02:55:18 +02:00
2021-06-23 10:42:27 +02:00
$db -> free ( $resql );
2020-10-31 14:32:18 +01:00
}
2016-05-21 16:01:14 +02:00
2021-06-23 10:42:27 +02:00
// Include other local consts.php files and fetch their values to the corresponding database constants.
if ( ! empty ( $this -> global -> LOCAL_CONSTS_FILES )) {
$filesList = explode ( " : " , $this -> global -> LOCAL_CONSTS_FILES );
foreach ( $filesList as $file ) {
$file = dol_sanitizeFileName ( $file );
dol_include_once ( $file . " / " . $file . " _consts.php " ); // This file can run code like setting $this->global->XXX vars.
}
}
2012-04-10 12:38:10 +02:00
2021-06-23 10:42:27 +02:00
//var_dump($this->modules);
//var_dump($this->modules_parts['theme']);
// If you can't set timezone of your PHP, set this constant. Better is to set it to UTC.
// In future, this constant will be forced to 'UTC' so PHP server timezone will not have effect anymore.
//$this->global->MAIN_SERVER_TZ='Europe/Paris';
if ( ! empty ( $this -> global -> MAIN_SERVER_TZ ) && $this -> global -> MAIN_SERVER_TZ != 'auto' ) {
try {
date_default_timezone_set ( $this -> global -> MAIN_SERVER_TZ );
} catch ( Exception $e ) {
dol_syslog ( " Error: Bad value for parameter MAIN_SERVER_TZ= " . $this -> global -> MAIN_SERVER_TZ , LOG_ERR );
}
2014-04-09 17:07:27 +02:00
}
2014-03-21 18:35:50 +01:00
2021-06-23 10:42:27 +02:00
// Object $mc
if ( ! defined ( 'NOREQUIREMC' ) && ! empty ( $this -> multicompany -> enabled )) {
global $mc ;
$ret = @ dol_include_once ( '/multicompany/class/actions_multicompany.class.php' );
if ( $ret ) {
$mc = new ActionsMulticompany ( $db );
$this -> mc = $mc ;
}
2018-11-27 17:37:39 +01:00
}
2012-04-10 12:38:10 +02:00
2021-06-23 10:42:27 +02:00
// Clean some variables
if ( empty ( $this -> global -> MAIN_MENU_STANDARD )) {
$this -> global -> MAIN_MENU_STANDARD = " eldy_menu.php " ;
}
if ( empty ( $this -> global -> MAIN_MENUFRONT_STANDARD )) {
$this -> global -> MAIN_MENUFRONT_STANDARD = " eldy_menu.php " ;
}
if ( empty ( $this -> global -> MAIN_MENU_SMARTPHONE )) {
$this -> global -> MAIN_MENU_SMARTPHONE = " eldy_menu.php " ; // Use eldy by default because smartphone does not work on all phones
}
if ( empty ( $this -> global -> MAIN_MENUFRONT_SMARTPHONE )) {
$this -> global -> MAIN_MENUFRONT_SMARTPHONE = " eldy_menu.php " ; // Use eldy by default because smartphone does not work on all phones
}
if ( ! isset ( $this -> global -> FACTURE_TVAOPTION )) {
$this -> global -> FACTURE_TVAOPTION = 1 ;
}
2014-04-09 17:07:27 +02:00
2021-06-23 10:42:27 +02:00
// Variable globales LDAP
if ( empty ( $this -> global -> LDAP_FIELD_FULLNAME )) {
$this -> global -> LDAP_FIELD_FULLNAME = '' ;
}
if ( ! isset ( $this -> global -> LDAP_KEY_USERS )) {
$this -> global -> LDAP_KEY_USERS = $this -> global -> LDAP_FIELD_FULLNAME ;
}
if ( ! isset ( $this -> global -> LDAP_KEY_GROUPS )) {
$this -> global -> LDAP_KEY_GROUPS = $this -> global -> LDAP_FIELD_FULLNAME ;
}
if ( ! isset ( $this -> global -> LDAP_KEY_CONTACTS )) {
$this -> global -> LDAP_KEY_CONTACTS = $this -> global -> LDAP_FIELD_FULLNAME ;
}
if ( ! isset ( $this -> global -> LDAP_KEY_MEMBERS )) {
$this -> global -> LDAP_KEY_MEMBERS = $this -> global -> LDAP_FIELD_FULLNAME ;
}
if ( ! isset ( $this -> global -> LDAP_KEY_MEMBERS_TYPES )) {
$this -> global -> LDAP_KEY_MEMBERS_TYPES = $this -> global -> LDAP_FIELD_FULLNAME ;
}
2007-10-22 01:04:06 +02:00
2021-06-23 10:42:27 +02:00
// Load translation object with current language
if ( empty ( $this -> global -> MAIN_LANG_DEFAULT )) {
$this -> global -> MAIN_LANG_DEFAULT = " en_US " ;
}
2007-10-22 01:04:06 +02:00
2021-06-23 10:42:27 +02:00
$rootfordata = DOL_DATA_ROOT ;
$rootforuser = DOL_DATA_ROOT ;
// If multicompany module is enabled, we redefine the root of data
if ( ! empty ( $this -> multicompany -> enabled ) && ! empty ( $this -> entity ) && $this -> entity > 1 ) {
$rootfordata .= '/' . $this -> entity ;
}
// Set standard temporary folder name or global override
$rootfortemp = empty ( $this -> global -> MAIN_TEMP_DIR ) ? $rootfordata : $this -> global -> MAIN_TEMP_DIR ;
// Define default dir_output and dir_temp for directories of modules
foreach ( $this -> modules as $module ) {
//var_dump($module);
// For multicompany sharings
$this -> $module -> multidir_output = array ( $this -> entity => $rootfordata . " / " . $module );
$this -> $module -> multidir_temp = array ( $this -> entity => $rootfortemp . " / " . $module . " /temp " );
// For backward compatibility
$this -> $module -> dir_output = $rootfordata . " / " . $module ;
$this -> $module -> dir_temp = $rootfortemp . " / " . $module . " /temp " ;
}
2009-04-29 20:38:45 +02:00
2021-06-23 10:42:27 +02:00
// External modules storage
if ( ! empty ( $this -> modules_parts [ 'dir' ])) {
foreach ( $this -> modules_parts [ 'dir' ] as $module => $dirs ) {
if ( ! empty ( $this -> $module -> enabled )) {
foreach ( $dirs as $type => $name ) { // $type is 'output' or 'temp'
$multidirname = 'multidir_' . $type ;
$dirname = 'dir_' . $type ;
if ( $type != 'temp' ) {
// For multicompany sharings
$this -> $module -> $multidirname = array ( $this -> entity => $rootfordata . " / " . $name );
// For backward compatibility
$this -> $module -> $dirname = $rootfordata . " / " . $name ;
} else {
// For multicompany sharings
$this -> $module -> $multidirname = array ( $this -> entity => $rootfortemp . " / " . $name . " /temp " );
// For backward compatibility
$this -> $module -> $dirname = $rootfortemp . " / " . $name . " /temp " ;
}
2020-01-29 10:55:56 +01:00
}
2017-09-25 09:01:47 +02:00
}
2012-09-05 17:34:56 +02:00
}
}
2021-06-23 10:42:27 +02:00
// For mycompany storage
$this -> mycompany -> dir_output = $rootfordata . " /mycompany " ;
$this -> mycompany -> dir_temp = $rootfortemp . " /mycompany/temp " ;
// For admin storage
$this -> admin -> dir_output = $rootfordata . '/admin' ;
$this -> admin -> dir_temp = $rootfortemp . '/admin/temp' ;
// For user storage
$this -> user -> multidir_output = array ( $this -> entity => $rootfordata . " /users " );
$this -> user -> multidir_temp = array ( $this -> entity => $rootfortemp . " /users/temp " );
// For backward compatibility
$this -> user -> dir_output = $rootforuser . " /users " ;
$this -> user -> dir_temp = $rootfortemp . " /users/temp " ;
// For proposal storage
$this -> propal -> multidir_output = array ( $this -> entity => $rootfordata . " /propale " );
$this -> propal -> multidir_temp = array ( $this -> entity => $rootfortemp . " /propale/temp " );
// For backward compatibility
$this -> propal -> dir_output = $rootfordata . " /propale " ;
$this -> propal -> dir_temp = $rootfortemp . " /propale/temp " ;
// For medias storage
$this -> medias -> multidir_output = array ( $this -> entity => $rootfordata . " /medias " );
$this -> medias -> multidir_temp = array ( $this -> entity => $rootfortemp . " /medias/temp " );
// Exception: Some dir are not the name of module. So we keep exception here for backward compatibility.
// Sous module bons d'expedition
$this -> expedition_bon -> enabled = ( ! empty ( $this -> global -> MAIN_SUBMODULE_EXPEDITION ) ? $this -> global -> MAIN_SUBMODULE_EXPEDITION : 0 );
// Sub module delivery note Sous module bons de livraison
$this -> delivery_note -> enabled = ( ! empty ( $this -> global -> MAIN_SUBMODULE_DELIVERY ) ? $this -> global -> MAIN_SUBMODULE_DELIVERY : 0 );
// Module fournisseur
if ( ! empty ( $this -> fournisseur )) {
$this -> fournisseur -> commande = new stdClass ();
$this -> fournisseur -> commande -> multidir_output = array ( $this -> entity => $rootfordata . " /fournisseur/commande " );
$this -> fournisseur -> commande -> multidir_temp = array ( $this -> entity => $rootfortemp . " /fournisseur/commande/temp " );
$this -> fournisseur -> commande -> dir_output = $rootfordata . " /fournisseur/commande " ; // For backward compatibility
$this -> fournisseur -> commande -> dir_temp = $rootfortemp . " /fournisseur/commande/temp " ; // For backward compatibility
$this -> fournisseur -> facture = new stdClass ();
$this -> fournisseur -> facture -> multidir_output = array ( $this -> entity => $rootfordata . " /fournisseur/facture " );
$this -> fournisseur -> facture -> multidir_temp = array ( $this -> entity => $rootfortemp . " /fournisseur/facture/temp " );
$this -> fournisseur -> facture -> dir_output = $rootfordata . " /fournisseur/facture " ; // For backward compatibility
$this -> fournisseur -> facture -> dir_temp = $rootfortemp . " /fournisseur/facture/temp " ; // For backward compatibility
$this -> supplierproposal = new stdClass ();
$this -> supplierproposal -> multidir_output = array ( $this -> entity => $rootfordata . " /supplier_proposal " );
$this -> supplierproposal -> multidir_temp = array ( $this -> entity => $rootfortemp . " /supplier_proposal/temp " );
$this -> supplierproposal -> dir_output = $rootfordata . " /supplier_proposal " ; // For backward compatibility
$this -> supplierproposal -> dir_temp = $rootfortemp . " /supplier_proposal/temp " ; // For backward compatibility
$this -> fournisseur -> payment = new stdClass ();
$this -> fournisseur -> payment -> multidir_output = array ( $this -> entity => $rootfordata . " /fournisseur/payment " );
$this -> fournisseur -> payment -> multidir_temp = array ( $this -> entity => $rootfortemp . " /fournisseur/payment/temp " );
$this -> fournisseur -> payment -> dir_output = $rootfordata . " /fournisseur/payment " ; // For backward compatibility
$this -> fournisseur -> payment -> dir_temp = $rootfortemp . " /fournisseur/payment/temp " ; // For backward compatibility
// To prepare split of module fournisseur into module 'fournisseur' + supplier_order + supplier_invoice
if ( ! empty ( $this -> fournisseur -> enabled ) && empty ( $this -> global -> MAIN_USE_NEW_SUPPLIERMOD )) { // By default, if module supplier is on, and we don't use yet the new modules, we set artificially the module properties
$this -> supplier_order = new stdClass ();
$this -> supplier_order -> enabled = 1 ;
$this -> supplier_order -> multidir_output = array ( $this -> entity => $rootfordata . " /fournisseur/commande " );
$this -> supplier_order -> multidir_temp = array ( $this -> entity => $rootfortemp . " /fournisseur/commande/temp " );
$this -> supplier_order -> dir_output = $rootfordata . " /fournisseur/commande " ; // For backward compatibility
$this -> supplier_order -> dir_temp = $rootfortemp . " /fournisseur/commande/temp " ; // For backward compatibility
$this -> supplier_invoice = new stdClass ();
$this -> supplier_invoice -> enabled = 1 ;
$this -> supplier_invoice -> multidir_output = array ( $this -> entity => $rootfordata . " /fournisseur/facture " );
$this -> supplier_invoice -> multidir_temp = array ( $this -> entity => $rootfortemp . " /fournisseur/facture/temp " );
$this -> supplier_invoice -> dir_output = $rootfordata . " /fournisseur/facture " ; // For backward compatibility
$this -> supplier_invoice -> dir_temp = $rootfortemp . " /fournisseur/facture/temp " ; // For backward compatibility
}
2016-01-14 13:24:49 +01:00
}
2012-04-10 12:38:10 +02:00
2021-06-23 10:42:27 +02:00
// Module product/service
$this -> product -> multidir_output = array ( $this -> entity => $rootfordata . " /produit " );
$this -> product -> multidir_temp = array ( $this -> entity => $rootfortemp . " /produit/temp " );
$this -> service -> multidir_output = array ( $this -> entity => $rootfordata . " /produit " );
$this -> service -> multidir_temp = array ( $this -> entity => $rootfortemp . " /produit/temp " );
// For backward compatibility
$this -> product -> dir_output = $rootfordata . " /produit " ;
$this -> product -> dir_temp = $rootfortemp . " /produit/temp " ;
$this -> service -> dir_output = $rootfordata . " /produit " ;
$this -> service -> dir_temp = $rootfortemp . " /produit/temp " ;
// Module productbatch
$this -> productbatch -> multidir_output = array ( $this -> entity => $rootfordata . " /productlot " );
$this -> productbatch -> multidir_temp = array ( $this -> entity => $rootfortemp . " /productlot/temp " );
// Module contrat
$this -> contrat -> multidir_output = array ( $this -> entity => $rootfordata . " /contract " );
$this -> contrat -> multidir_temp = array ( $this -> entity => $rootfortemp . " /contract/temp " );
// For backward compatibility
$this -> contrat -> dir_output = $rootfordata . " /contract " ;
$this -> contrat -> dir_temp = $rootfortemp . " /contract/temp " ;
2006-07-15 20:29:46 +02:00
2021-06-23 10:42:27 +02:00
// Module bank
$this -> bank -> multidir_output = array ( $this -> entity => $rootfordata . " /bank " );
$this -> bank -> multidir_temp = array ( $this -> entity => $rootfortemp . " /bank/temp " );
// For backward compatibility
$this -> bank -> dir_output = $rootfordata . " /bank " ;
$this -> bank -> dir_temp = $rootfortemp . " /bank/temp " ;
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
// Set some default values
//$this->global->MAIN_LIST_FILTER_ON_DAY=1; // On filter that show date, we must show input field for day before or after month
$this -> global -> MAIN_MAIL_USE_MULTI_PART = 1 ;
2006-07-15 20:29:46 +02:00
2021-06-23 10:42:27 +02:00
// societe
if ( empty ( $this -> global -> SOCIETE_CODECLIENT_ADDON )) {
$this -> global -> SOCIETE_CODECLIENT_ADDON = " mod_codeclient_leopard " ;
}
if ( empty ( $this -> global -> SOCIETE_CODECOMPTA_ADDON )) {
$this -> global -> SOCIETE_CODECOMPTA_ADDON = " mod_codecompta_panicum " ;
}
2006-07-15 20:29:46 +02:00
2021-06-23 10:42:27 +02:00
if ( empty ( $this -> global -> CHEQUERECEIPTS_ADDON )) {
$this -> global -> CHEQUERECEIPTS_ADDON = 'mod_chequereceipt_mint' ;
}
if ( empty ( $this -> global -> TICKET_ADDON )) {
$this -> global -> TICKET_ADDON = 'mod_ticket_simple' ;
2018-10-03 18:05:22 +02:00
}
2014-12-05 16:01:01 +01:00
2021-06-23 10:42:27 +02:00
// Security
if ( empty ( $this -> global -> USER_PASSWORD_GENERATED )) {
$this -> global -> USER_PASSWORD_GENERATED = 'standard' ; // Default password generator
}
if ( empty ( $this -> global -> MAIN_UMASK )) {
$this -> global -> MAIN_UMASK = '0664' ; // Default mask
}
2021-05-25 23:26:03 +02:00
2021-06-23 10:42:27 +02:00
// conf->use_javascript_ajax
$this -> use_javascript_ajax = 1 ;
if ( isset ( $this -> global -> MAIN_DISABLE_JAVASCRIPT )) {
$this -> use_javascript_ajax = ! $this -> global -> MAIN_DISABLE_JAVASCRIPT ;
}
// If no javascript_ajax, Ajax features are disabled.
if ( empty ( $this -> use_javascript_ajax )) {
unset ( $this -> global -> PRODUIT_USE_SEARCH_TO_SELECT );
unset ( $this -> global -> COMPANY_USE_SEARCH_TO_SELECT );
unset ( $this -> global -> CONTACT_USE_SEARCH_TO_SELECT );
unset ( $this -> global -> PROJECT_USE_SEARCH_TO_SELECT );
}
2006-07-15 20:29:46 +02:00
2021-06-23 10:42:27 +02:00
if ( ! empty ( $this -> productbatch -> enabled )) {
$this -> global -> STOCK_CALCULATE_ON_BILL = 0 ;
$this -> global -> STOCK_CALCULATE_ON_VALIDATE_ORDER = 0 ;
2022-03-14 17:59:18 +01:00
if ( empty ( $this -> global -> STOCK_CALCULATE_ON_SHIPMENT_CLOSE )) $this -> global -> STOCK_CALCULATE_ON_SHIPMENT = 1 ;
if ( empty ( $this -> global -> STOCK_CALCULATE_ON_SHIPMENT )) $this -> global -> STOCK_CALCULATE_ON_SHIPMENT_CLOSE = 1 ;
2021-06-23 10:42:27 +02:00
$this -> global -> STOCK_CALCULATE_ON_SUPPLIER_BILL = 0 ;
$this -> global -> STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER = 0 ;
if ( empty ( $this -> reception -> enabled )) {
$this -> global -> STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER = 1 ;
} else {
2022-03-14 17:59:18 +01:00
if ( empty ( $this -> global -> STOCK_CALCULATE_ON_RECEPTION_CLOSE )) $this -> global -> STOCK_CALCULATE_ON_RECEPTION = 1 ;
if ( empty ( $this -> global -> STOCK_CALCULATE_ON_RECEPTION )) $this -> global -> STOCK_CALCULATE_ON_RECEPTION_CLOSE = 1 ;
2021-06-23 10:42:27 +02:00
}
}
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
if ( ! isset ( $this -> global -> STOCK_SHOW_ALL_BATCH_BY_DEFAULT )) {
$this -> global -> STOCK_SHOW_ALL_BATCH_BY_DEFAULT = 1 ;
}
2006-07-15 20:29:46 +02:00
2021-06-23 10:42:27 +02:00
// conf->currency
if ( empty ( $this -> global -> MAIN_MONNAIE )) {
$this -> global -> MAIN_MONNAIE = 'EUR' ;
}
$this -> currency = $this -> global -> MAIN_MONNAIE ;
2019-07-19 16:18:14 +02:00
2021-06-23 10:42:27 +02:00
if ( empty ( $this -> global -> MAIN_BROWSER_NOTIFICATION_FREQUENCY )) {
$this -> global -> MAIN_BROWSER_NOTIFICATION_FREQUENCY = 30 ; // Less than 1 minutes to be sure
}
2014-12-05 16:01:01 +01:00
2021-06-23 10:42:27 +02:00
// conf->global->ACCOUNTING_MODE = Option des modules Comptabilites (simple ou expert). Defini le mode de calcul des etats comptables (CA,...)
if ( empty ( $this -> global -> ACCOUNTING_MODE )) {
$this -> global -> ACCOUNTING_MODE = 'RECETTES-DEPENSES' ; // By default. Can be 'RECETTES-DEPENSES' ou 'CREANCES-DETTES'
}
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
// By default, suppliers objects can be linked to all projects
if ( ! isset ( $this -> global -> PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS )) {
$this -> global -> PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS = 1 ;
}
2006-07-15 20:29:46 +02:00
2021-06-23 10:42:27 +02:00
// By default we enable feature to bill time spent
if ( ! isset ( $this -> global -> PROJECT_BILL_TIME_SPENT )) {
$this -> global -> PROJECT_BILL_TIME_SPENT = 1 ;
}
2006-07-15 20:29:46 +02:00
2021-06-23 10:42:27 +02:00
// MAIN_HTML_TITLE
if ( ! isset ( $this -> global -> MAIN_HTML_TITLE )) {
$this -> global -> MAIN_HTML_TITLE = 'noapp,thirdpartynameonly,contactnameonly,projectnameonly' ;
}
2009-02-20 21:28:16 +01:00
2021-06-23 10:42:27 +02:00
// conf->liste_limit = constante de taille maximale des listes
if ( empty ( $this -> global -> MAIN_SIZE_LISTE_LIMIT )) {
$this -> global -> MAIN_SIZE_LISTE_LIMIT = 25 ;
}
$this -> liste_limit = $this -> global -> MAIN_SIZE_LISTE_LIMIT ;
2011-03-09 17:38:44 +01:00
2021-06-23 10:42:27 +02:00
// conf->product->limit_size = constante de taille maximale des select de produit
if ( ! isset ( $this -> global -> PRODUIT_LIMIT_SIZE )) {
$this -> global -> PRODUIT_LIMIT_SIZE = 1000 ;
}
$this -> product -> limit_size = $this -> global -> PRODUIT_LIMIT_SIZE ;
2006-08-05 18:44:43 +02:00
2021-06-23 10:42:27 +02:00
// conf->theme et $this->css
if ( empty ( $this -> global -> MAIN_THEME )) {
$this -> global -> MAIN_THEME = " eldy " ;
}
if ( ! empty ( $this -> global -> MAIN_FORCETHEME )) {
$this -> global -> MAIN_THEME = $this -> global -> MAIN_FORCETHEME ;
}
$this -> theme = $this -> global -> MAIN_THEME ;
$this -> css = " /theme/ " . $this -> theme . " /style.css.php " ;
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
// conf->email_from = email pour envoi par dolibarr des mails automatiques
$this -> email_from = " robot@example.com " ;
if ( ! empty ( $this -> global -> MAIN_MAIL_EMAIL_FROM )) {
$this -> email_from = $this -> global -> MAIN_MAIL_EMAIL_FROM ;
}
2020-12-05 14:06:50 +01:00
2021-06-23 10:42:27 +02:00
// conf->notification->email_from = email pour envoi par Dolibarr des notifications
$this -> notification -> email_from = $this -> email_from ;
if ( ! empty ( $this -> global -> NOTIFICATION_EMAIL_FROM )) {
$this -> notification -> email_from = $this -> global -> NOTIFICATION_EMAIL_FROM ;
}
2012-08-19 09:05:50 +02:00
2021-06-23 10:42:27 +02:00
// conf->mailing->email_from = email pour envoi par Dolibarr des mailings
$this -> mailing -> email_from = $this -> email_from ;
if ( ! empty ( $this -> global -> MAILING_EMAIL_FROM )) {
$this -> mailing -> email_from = $this -> global -> MAILING_EMAIL_FROM ;
}
2007-06-16 15:06:05 +02:00
2021-06-23 10:42:27 +02:00
if ( ! isset ( $this -> global -> MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP )) {
$this -> global -> MAIN_HIDE_WARNING_TO_ENCOURAGE_SMTP_SETUP = 1 ;
}
2017-06-06 07:57:03 +02:00
2021-10-05 09:11:20 +02:00
if ( ! isset ( $this -> global -> MAIN_FIX_FOR_BUGGED_MTA )) {
$this -> global -> MAIN_FIX_FOR_BUGGED_MTA = 1 ;
}
2021-06-23 10:42:27 +02:00
// Format for date (used by default when not found or not searched in lang)
$this -> format_date_short = " %d/%m/%Y " ; // Format of day with PHP/C tags (strftime functions)
$this -> format_date_short_java = " dd/MM/yyyy " ; // Format of day with Java tags
$this -> format_hour_short = " %H:%M " ;
$this -> format_hour_short_duration = " %H:%M " ;
$this -> format_date_text_short = " %d %b %Y " ;
$this -> format_date_text = " %d %B %Y " ;
$this -> format_date_hour_short = " %d/%m/%Y %H:%M " ;
$this -> format_date_hour_sec_short = " %d/%m/%Y %H:%M:%S " ;
$this -> format_date_hour_text_short = " %d %b %Y %H:%M " ;
$this -> format_date_hour_text = " %d %B %Y %H:%M " ;
// Duration of workday
if ( ! isset ( $this -> global -> MAIN_DURATION_OF_WORKDAY )) {
$this -> global -> MAIN_DURATION_OF_WORKDAY = 86400 ;
}
2013-01-02 18:43:59 +01:00
2021-06-23 10:42:27 +02:00
// Limites decimales si non definie (peuvent etre egale a 0)
if ( ! isset ( $this -> global -> MAIN_MAX_DECIMALS_UNIT )) {
$this -> global -> MAIN_MAX_DECIMALS_UNIT = 5 ;
}
if ( ! isset ( $this -> global -> MAIN_MAX_DECIMALS_TOT )) {
$this -> global -> MAIN_MAX_DECIMALS_TOT = 2 ;
}
if ( ! isset ( $this -> global -> MAIN_MAX_DECIMALS_SHOWN )) {
$this -> global -> MAIN_MAX_DECIMALS_SHOWN = 8 ;
}
2016-08-16 02:55:18 +02:00
2021-06-23 10:42:27 +02:00
// Default pdf option
if ( ! isset ( $this -> global -> MAIN_PDF_DASH_BETWEEN_LINES )) {
$this -> global -> MAIN_PDF_DASH_BETWEEN_LINES = 1 ; // use dash between lines
}
if ( ! isset ( $this -> global -> PDF_ALLOW_HTML_FOR_FREE_TEXT )) {
$this -> global -> PDF_ALLOW_HTML_FOR_FREE_TEXT = 1 ; // allow html content into free footer text
}
2016-08-16 02:55:18 +02:00
2021-06-23 10:42:27 +02:00
// Default max file size for upload
$this -> maxfilesize = ( empty ( $this -> global -> MAIN_UPLOAD_DOC ) ? 0 : ( int ) $this -> global -> MAIN_UPLOAD_DOC * 1024 );
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
// By default, we propagate contacts
if ( ! isset ( $this -> global -> MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN )) {
$this -> global -> MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN = '*' ; // Can be also '*' or '^(BILLING|SHIPPING|CUSTOMER|.*)$' (regex not yet implemented)
}
2018-09-04 10:10:47 +02:00
2021-06-23 10:42:27 +02:00
// By default, we do not use the zip town table but the table of third parties
if ( ! isset ( $this -> global -> MAIN_USE_ZIPTOWN_DICTIONNARY )) {
$this -> global -> MAIN_USE_ZIPTOWN_DICTIONNARY = 0 ;
}
2019-08-24 18:12:20 +02:00
2021-06-23 10:42:27 +02:00
// By default, we open card if one found
if ( ! isset ( $this -> global -> MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE )) {
$this -> global -> MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE = 1 ;
2021-02-23 22:03:23 +01:00
}
2012-08-13 16:18:02 +02:00
2021-06-23 10:42:27 +02:00
// By default, we show state code in combo list
if ( ! isset ( $this -> global -> MAIN_SHOW_STATE_CODE )) {
$this -> global -> MAIN_SHOW_STATE_CODE = 1 ;
}
2015-03-24 14:08:56 +01:00
2021-11-17 11:14:12 +01:00
// By default, we show state code in combo list
if ( ! isset ( $this -> global -> MULTICURRENCY_USE_ORIGIN_TX )) {
$this -> global -> MULTICURRENCY_USE_ORIGIN_TX = 1 ;
}
2021-06-23 10:42:27 +02:00
// Use a SCA ready workflow with Stripe module (STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION by default if nothing defined)
if ( ! isset ( $this -> global -> STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION ) && empty ( $this -> global -> STRIPE_USE_NEW_CHECKOUT )) {
$this -> global -> STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = 1 ;
}
2011-04-03 13:59:10 +02:00
2021-06-23 10:42:27 +02:00
// Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal"
if ( ! isset ( $this -> global -> MAIN_MODULES_FOR_EXTERNAL )) {
$this -> global -> MAIN_MODULES_FOR_EXTERNAL = 'user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent,blockedlog' ; // '' means 'all'. Note that contact is added here as it should be a module later.
}
if ( ! empty ( $this -> modules_parts [ 'moduleforexternal' ])) { // Module part to include an external module into the MAIN_MODULES_FOR_EXTERNAL list
foreach ( $this -> modules_parts [ 'moduleforexternal' ] as $key => $value ) {
$this -> global -> MAIN_MODULES_FOR_EXTERNAL .= " , " . $key ;
}
}
2010-09-29 20:38:47 +02:00
2021-06-23 10:42:27 +02:00
// Enable select2
if ( empty ( $this -> global -> MAIN_USE_JQUERY_MULTISELECT ) || $this -> global -> MAIN_USE_JQUERY_MULTISELECT == '1' ) {
$this -> global -> MAIN_USE_JQUERY_MULTISELECT = 'select2' ;
}
2016-08-16 02:55:18 +02:00
2021-06-23 10:42:27 +02:00
// Timeouts
if ( empty ( $this -> global -> MAIN_USE_CONNECT_TIMEOUT )) {
$this -> global -> MAIN_USE_CONNECT_TIMEOUT = 10 ;
}
if ( empty ( $this -> global -> MAIN_USE_RESPONSE_TIMEOUT )) {
$this -> global -> MAIN_USE_RESPONSE_TIMEOUT = 30 ;
}
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
// Set default variable to calculate VAT as if option tax_mode was 0 (standard)
if ( empty ( $this -> global -> TAX_MODE_SELL_PRODUCT )) {
$this -> global -> TAX_MODE_SELL_PRODUCT = 'invoice' ;
}
if ( empty ( $this -> global -> TAX_MODE_BUY_PRODUCT )) {
$this -> global -> TAX_MODE_BUY_PRODUCT = 'invoice' ;
}
if ( empty ( $this -> global -> TAX_MODE_SELL_SERVICE )) {
$this -> global -> TAX_MODE_SELL_SERVICE = 'payment' ;
}
if ( empty ( $this -> global -> TAX_MODE_BUY_SERVICE )) {
$this -> global -> TAX_MODE_BUY_SERVICE = 'payment' ;
}
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
// Delay before warnings
// Avoid strict errors. TODO: Replace xxx->warning_delay with a property ->warning_delay_xxx
if ( isset ( $this -> agenda )) {
$this -> adherent -> subscription = new stdClass ();
$this -> adherent -> subscription -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_MEMBERS ) ? $this -> global -> MAIN_DELAY_MEMBERS : 0 ) * 86400 ;
}
if ( isset ( $this -> agenda )) {
$this -> agenda -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_ACTIONS_TODO ) ? $this -> global -> MAIN_DELAY_ACTIONS_TODO : 7 ) * 86400 ;
}
if ( isset ( $this -> projet )) {
$this -> projet -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_PROJECT_TO_CLOSE ) ? $this -> global -> MAIN_DELAY_PROJECT_TO_CLOSE : 7 ) * 86400 ;
$this -> projet -> task = new StdClass ();
$this -> projet -> task -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_TASKS_TODO ) ? $this -> global -> MAIN_DELAY_TASKS_TODO : 7 ) * 86400 ;
}
2014-06-22 13:33:31 +02:00
2021-06-23 10:42:27 +02:00
if ( isset ( $this -> commande )) {
$this -> commande -> client = new stdClass ();
$this -> commande -> fournisseur = new stdClass ();
$this -> commande -> client -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_ORDERS_TO_PROCESS ) ? $this -> global -> MAIN_DELAY_ORDERS_TO_PROCESS : 2 ) * 86400 ;
$this -> commande -> fournisseur -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS ) ? $this -> global -> MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS : 7 ) * 86400 ;
}
if ( isset ( $this -> propal )) {
$this -> propal -> cloture = new stdClass ();
$this -> propal -> facturation = new stdClass ();
$this -> propal -> cloture -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_PROPALS_TO_CLOSE ) ? $this -> global -> MAIN_DELAY_PROPALS_TO_CLOSE : 0 ) * 86400 ;
$this -> propal -> facturation -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_PROPALS_TO_BILL ) ? $this -> global -> MAIN_DELAY_PROPALS_TO_BILL : 0 ) * 86400 ;
}
if ( isset ( $this -> facture )) {
$this -> facture -> client = new stdClass ();
$this -> facture -> fournisseur = new stdClass ();
$this -> facture -> client -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_CUSTOMER_BILLS_UNPAYED ) ? $this -> global -> MAIN_DELAY_CUSTOMER_BILLS_UNPAYED : 0 ) * 86400 ;
$this -> facture -> fournisseur -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_SUPPLIER_BILLS_TO_PAY ) ? $this -> global -> MAIN_DELAY_SUPPLIER_BILLS_TO_PAY : 0 ) * 86400 ;
}
if ( isset ( $this -> contrat )) {
$this -> contrat -> services = new stdClass ();
$this -> contrat -> services -> inactifs = new stdClass ();
$this -> contrat -> services -> expires = new stdClass ();
$this -> contrat -> services -> inactifs -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_NOT_ACTIVATED_SERVICES ) ? $this -> global -> MAIN_DELAY_NOT_ACTIVATED_SERVICES : 0 ) * 86400 ;
$this -> contrat -> services -> expires -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_RUNNING_SERVICES ) ? $this -> global -> MAIN_DELAY_RUNNING_SERVICES : 0 ) * 86400 ;
}
if ( isset ( $this -> commande )) {
2021-11-03 22:56:15 +01:00
$this -> bank -> rappro = new stdClass ();
$this -> bank -> cheque = new stdClass ();
2021-06-23 10:42:27 +02:00
$this -> bank -> rappro -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE ) ? $this -> global -> MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE : 0 ) * 86400 ;
$this -> bank -> cheque -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_CHEQUES_TO_DEPOSIT ) ? $this -> global -> MAIN_DELAY_CHEQUES_TO_DEPOSIT : 0 ) * 86400 ;
}
if ( isset ( $this -> expensereport )) {
$this -> expensereport -> approve = new stdClass ();
$this -> expensereport -> approve -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_EXPENSEREPORTS ) ? $this -> global -> MAIN_DELAY_EXPENSEREPORTS : 0 ) * 86400 ;
$this -> expensereport -> payment = new stdClass ();
$this -> expensereport -> payment -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_EXPENSEREPORTS_TO_PAY ) ? $this -> global -> MAIN_DELAY_EXPENSEREPORTS_TO_PAY : 0 ) * 86400 ;
}
if ( isset ( $this -> holiday )) {
$this -> holiday -> approve = new stdClass ();
$this -> holiday -> approve -> warning_delay = ( isset ( $this -> global -> MAIN_DELAY_HOLIDAYS ) ? $this -> global -> MAIN_DELAY_HOLIDAYS : 0 ) * 86400 ;
}
2017-03-01 11:18:11 +01:00
2021-06-23 10:42:27 +02:00
if ( ! empty ( $this -> global -> PRODUIT_MULTIPRICES ) && empty ( $this -> global -> PRODUIT_MULTIPRICES_LIMIT )) {
$this -> global -> PRODUIT_MULTIPRICES_LIMIT = 5 ;
}
2017-12-16 20:52:49 +01:00
2021-06-23 10:42:27 +02:00
// For modules that want to disable top or left menu
if ( ! empty ( $this -> global -> MAIN_HIDE_TOP_MENU )) {
$this -> dol_hide_topmenu = $this -> global -> MAIN_HIDE_TOP_MENU ;
}
if ( ! empty ( $this -> global -> MAIN_HIDE_LEFT_MENU )) {
$this -> dol_hide_leftmenu = $this -> global -> MAIN_HIDE_LEFT_MENU ;
}
2017-06-06 07:57:03 +02:00
2021-06-23 10:42:27 +02:00
if ( empty ( $this -> global -> MAIN_SIZE_SHORTLIST_LIMIT )) {
$this -> global -> MAIN_SIZE_SHORTLIST_LIMIT = 3 ;
}
2020-03-05 02:55:06 +01:00
2021-06-23 10:42:27 +02:00
// Save inconsistent option
if ( empty ( $this -> global -> AGENDA_USE_EVENT_TYPE ) && ( ! isset ( $this -> global -> AGENDA_DEFAULT_FILTER_TYPE ) || $this -> global -> AGENDA_DEFAULT_FILTER_TYPE == 'AC_NON_AUTO' )) {
$this -> global -> AGENDA_DEFAULT_FILTER_TYPE = '0' ; // 'AC_NON_AUTO' does not exists when AGENDA_DEFAULT_FILTER_TYPE is not on.
}
2019-08-31 14:41:54 +02:00
2021-06-23 10:42:27 +02:00
if ( ! isset ( $this -> global -> MAIN_JS_GRAPH )) {
$this -> global -> MAIN_JS_GRAPH = 'chart' ; // Use chart.js library
}
2020-10-05 05:00:59 +02:00
2021-06-23 10:42:27 +02:00
if ( empty ( $this -> global -> MAIN_MODULE_DOLISTORE_API_SRV )) {
$this -> global -> MAIN_MODULE_DOLISTORE_API_SRV = 'https://www.dolistore.com' ;
}
if ( empty ( $this -> global -> MAIN_MODULE_DOLISTORE_API_KEY )) {
$this -> global -> MAIN_MODULE_DOLISTORE_API_KEY = 'dolistorecatalogpublickey1234567' ;
}
2021-01-03 18:42:45 +01:00
2021-09-29 17:34:31 +02:00
// Enable by default the CSRF protection by token.
if ( ! isset ( $this -> global -> MAIN_SECURITY_CSRF_WITH_TOKEN )) {
2021-10-01 12:37:32 +02:00
// Value 1 makes CSRF check for all POST parameters only
// Value 2 makes also CSRF check for GET requests with action = a sensitive requests like action=del, action=remove...
// Value 3 makes also CSRF check for all GET requests with a param action or massaction
2022-03-30 12:02:20 +02:00
$this -> global -> MAIN_SECURITY_CSRF_WITH_TOKEN = 2 ;
2021-09-29 17:34:31 +02:00
// Note: Set MAIN_SECURITY_CSRF_TOKEN_RENEWAL_ON_EACH_CALL=1 to have a renewal of token at each page call instead of each session (not recommended)
2021-06-23 10:42:27 +02:00
}
2021-01-07 12:39:51 +01:00
2021-10-19 12:36:33 +02:00
if ( ! defined ( 'MAIN_ANTIVIRUS_BYPASS_COMMAND_AND_PARAM' )) {
if ( defined ( 'MAIN_ANTIVIRUS_COMMAND' )) {
$this -> global -> MAIN_ANTIVIRUS_COMMAND = constant ( 'MAIN_ANTIVIRUS_COMMAND' );
}
if ( defined ( 'MAIN_ANTIVIRUS_PARAM' )) {
$this -> global -> MAIN_ANTIVIRUS_PARAM = constant ( 'MAIN_ANTIVIRUS_PARAM' );
}
2021-06-23 10:42:27 +02:00
}
2006-06-03 01:20:36 +02:00
2021-11-03 22:56:15 +01:00
// For backward compatibility
if ( ! empty ( $this -> global -> LDAP_SYNCHRO_ACTIVE )) {
if ( $this -> global -> LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap' ) {
$this -> global -> LDAP_SYNCHRO_ACTIVE = 1 ;
2021-11-12 16:56:26 +01:00
} elseif ( $this -> global -> LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr' ) {
2021-11-03 22:56:15 +01:00
$this -> global -> LDAP_SYNCHRO_ACTIVE = 2 ;
}
}
// For backward compatibility
if ( ! empty ( $this -> global -> LDAP_MEMBER_ACTIVE ) && $this -> global -> LDAP_MEMBER_ACTIVE == 'ldap2dolibarr' ) {
$this -> global -> LDAP_MEMBER_ACTIVE = 2 ;
}
// For backward compatibility
if ( ! empty ( $this -> global -> LDAP_MEMBER_TYPE_ACTIVE ) && $this -> global -> LDAP_MEMBER_TYPE_ACTIVE == 'ldap2dolibarr' ) {
$this -> global -> LDAP_MEMBER_TYPE_ACTIVE = 2 ;
}
2021-06-23 10:42:27 +02:00
if ( ! empty ( $this -> global -> MAIN_TZUSERINPUTKEY )) {
$this -> tzuserinputkey = $this -> global -> MAIN_TZUSERINPUTKEY ; // 'tzserver' or 'tzuserrel'
2021-02-23 22:03:23 +01:00
}
2012-12-02 14:33:24 +01:00
2021-06-23 10:42:27 +02:00
if ( ! empty ( $this -> global -> PRODUIT_AUTOFILL_DESC )) {
$this -> global -> MAIN_NO_CONCAT_DESCRIPTION = 1 ;
2020-06-26 01:44:21 +02:00
} else {
2021-06-23 10:42:27 +02:00
unset ( $this -> global -> MAIN_NO_CONCAT_DESCRIPTION );
}
// product is new use
if ( isset ( $this -> product )) {
// For backward compatibility
$this -> produit = $this -> product ;
}
// invoice is new use, facture is old use still initialised
if ( isset ( $this -> facture )) {
$this -> invoice = $this -> facture ;
}
// order is new use, commande is old use still initialised
if ( isset ( $this -> commande )) {
$this -> order = $this -> commande ;
}
// contract is new use, contrat is old use still initialised
if ( isset ( $this -> contrat )) {
$this -> contract = $this -> contrat ;
}
// category is new use, categorie is old use still initialised
if ( isset ( $this -> categorie )) {
$this -> category = $this -> categorie ;
}
// project is new use, projet is old use still initialised
if ( isset ( $this -> projet ) && ! isset ( $this -> project )) {
$this -> project = $this -> projet ;
}
// member is new use, adherent is old use still initialised
if ( isset ( $this -> adherent ) && ! isset ( $this -> member )) {
$this -> member = $this -> adherent ;
}
// Object $mc
if ( ! defined ( 'NOREQUIREMC' ) && ! empty ( $this -> multicompany -> enabled )) {
if ( is_object ( $mc )) {
$mc -> setValues ( $this );
}
2020-06-26 01:44:21 +02:00
}
2021-06-23 10:42:27 +02:00
if ( ! empty ( $this -> syslog -> enabled )) {
// We init log handlers
if ( ! empty ( $this -> global -> SYSLOG_HANDLERS )) {
$handlers = json_decode ( $this -> global -> SYSLOG_HANDLERS );
} else {
$handlers = array ();
2021-06-21 20:50:56 +02:00
}
2021-06-23 10:42:27 +02:00
foreach ( $handlers as $handler ) {
$handler_file_found = '' ;
$dirsyslogs = array ( '/core/modules/syslog/' );
if ( ! empty ( $this -> modules_parts [ 'syslog' ]) && is_array ( $this -> modules_parts [ 'syslog' ])) {
$dirsyslogs = array_merge ( $dirsyslogs , $this -> modules_parts [ 'syslog' ]);
}
foreach ( $dirsyslogs as $reldir ) {
$dir = dol_buildpath ( $reldir , 0 );
$newdir = dol_osencode ( $dir );
if ( is_dir ( $newdir )) {
$file = $newdir . $handler . '.php' ;
if ( file_exists ( $file )) {
$handler_file_found = $file ;
break ;
}
2020-06-26 01:44:21 +02:00
}
2016-08-16 02:55:18 +02:00
}
2021-06-23 10:42:27 +02:00
if ( empty ( $handler_file_found )) {
throw new Exception ( 'Missing log handler file ' . $handler . '.php' );
}
2016-08-16 02:55:18 +02:00
2021-06-23 10:42:27 +02:00
require_once $handler_file_found ;
$loghandlerinstance = new $handler ();
if ( ! $loghandlerinstance instanceof LogHandlerInterface ) {
throw new Exception ( 'Log handler does not extend LogHandlerInterface' );
}
2016-08-16 02:55:18 +02:00
2021-06-23 10:42:27 +02:00
if ( empty ( $this -> loghandlers [ $handler ])) {
$this -> loghandlers [ $handler ] = $loghandlerinstance ;
}
2020-06-26 01:44:21 +02:00
}
2016-08-16 02:55:18 +02:00
}
2020-10-31 14:32:18 +01:00
}
2020-11-01 20:11:09 +01:00
2021-06-23 10:42:27 +02:00
// Overwrite database values from conf into the conf.php file.
if ( ! empty ( $this -> file -> mailing_limit_sendbyweb )) {
$this -> global -> MAILING_LIMIT_SENDBYWEB = $this -> file -> mailing_limit_sendbyweb ;
}
if ( empty ( $this -> global -> MAILING_LIMIT_SENDBYWEB )) {
$this -> global -> MAILING_LIMIT_SENDBYWEB = 25 ;
}
if ( ! empty ( $this -> file -> mailing_limit_sendbycli )) {
$this -> global -> MAILING_LIMIT_SENDBYCLI = $this -> file -> mailing_limit_sendbycli ;
}
2020-11-01 20:11:09 +01:00
return 0 ;
2011-02-16 20:59:16 +01:00
}
2003-06-24 16:11:21 +02:00
}