Improve : tighten the security + cosmetic set double authentication : create, send link, usable with Google Authenticator and FreeOTP 1. OTP : prevent direct access without going throught the 2FA mechanism 2. Go back to the url where you were disconnected 3. Cosmetic
423 lines
No EOL
13 KiB
PHP
423 lines
No EOL
13 KiB
PHP
<?php
|
|
/*
|
|
* This file is part of NOALYSS.
|
|
*
|
|
* NOALYSS is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* NOALYSS 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
|
|
* along with NOALYSS; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
// Copyright Author Dany De Bontridder danydb@aevalys.eu
|
|
|
|
/*! \file
|
|
* \brief Contains all the variable + the javascript
|
|
* and some parameter
|
|
*/
|
|
|
|
global $version_noalyss;
|
|
// version
|
|
define('NOALYSS_VERSION', 9311 );
|
|
|
|
// Database schema version
|
|
define("DBVERSION", 203);
|
|
|
|
// version for MONO_DATABASE
|
|
define("MONO_DATABASE", 25);
|
|
|
|
// Version schema of account_repository database
|
|
define("DBVERSIONREPO", 20);
|
|
/*
|
|
* Include path
|
|
*/
|
|
$inc_path = get_include_path();
|
|
$dirname = dirname(__FILE__);
|
|
|
|
/* Global variable of the include dir */
|
|
global $g_include_dir, $g_ext_dir, $g_template_dir;
|
|
$g_include_dir = $dirname;
|
|
$g_ext_dir = $dirname . "/ext";
|
|
$g_template_dir = $dirname . "/template";
|
|
|
|
if (file_exists($dirname . '/config.inc.php')) require_once $dirname . '/config.inc.php';
|
|
|
|
if (!defined("NOALYSS_HOME")) define("NOALYSS_HOME", dirname($dirname) . "/html");
|
|
if (!defined("NOALYSS_BASE")) define("NOALYSS_BASE", dirname($dirname) );
|
|
if (!defined("NOALYSS_PLUGIN")) define("NOALYSS_PLUGIN", $g_ext_dir);
|
|
if (!defined("NOALYSS_INCLUDE")) define("NOALYSS_INCLUDE", $g_include_dir);
|
|
if (!defined("NOALYSS_TEMPLATE")) define("NOALYSS_TEMPLATE", $g_template_dir);
|
|
// pdftk can deal with all the PDF , for some of them it is preferable to fix it
|
|
// with convert , see also PDF2PS and PS2PDF if yes
|
|
if (!defined("FIX_BROKEN_PDF")) define("FIX_BROKEN_PDF", 'NO');
|
|
|
|
// version < 6.9.1.4 , the default administrator was phpcompta
|
|
if (!defined('NOALYSS_ADMINISTRATOR')) {
|
|
define('NOALYSS_ADMINISTRATOR', 'phpcompta');
|
|
}
|
|
if (!defined("SESSION_KEY")) {
|
|
define("SESSION_KEY", "RtYu0uu");
|
|
}
|
|
require_once NOALYSS_INCLUDE . '/constant.security.php';
|
|
|
|
if (strpos($inc_path, ";") != 0) {
|
|
$new_path = $inc_path . ';' . $dirname;
|
|
$os = 0; /* $os is 0 for windoz */
|
|
} else {
|
|
$new_path = $inc_path . ':' . $dirname;
|
|
$os = 1; /* $os is 1 for unix */
|
|
}
|
|
set_include_path($new_path);
|
|
@ini_set('default_charset', "UTF-8");
|
|
@ini_set('session.use_cookies', 1);
|
|
// deprecated
|
|
@ini_set('magic_quotes_gpc', 'off');
|
|
|
|
if (!defined('OVERRIDE_PARAM')) {
|
|
ini_set('max_execution_time', 240);
|
|
ini_set('memory_limit', '256M');
|
|
}
|
|
@ini_set('session.use_trans_sid', 'on');
|
|
@session_start();
|
|
|
|
/*
|
|
* Ini session
|
|
*/
|
|
|
|
if (!defined('NOALYSS_CAPTCHA')) {
|
|
define("NOALYSS_CAPTCHA", false);
|
|
}
|
|
|
|
global $g_failed, $g_succeed;
|
|
$g_failed = "<span style=\"font-size:18px;color:red\">x</span>";
|
|
$g_succeed = "<span style=\"font-size:18px;color:green\">✓</span>";
|
|
define('SMALLX', '#xe816;');
|
|
define('BUTTONADD', "✚");
|
|
define('ICON_SEARCH', '🔎');
|
|
define('ICON_CLEAN', '✕');
|
|
|
|
// If noalyss_version is not defined it is likely directly taken from
|
|
// git and so this variable is not set, this cause some issue
|
|
if (!defined('DEBUGNOALYSS')) {
|
|
define("DEBUGNOALYSS", 0);
|
|
}
|
|
|
|
if (!defined('LOGINPUT')) {
|
|
define("LOGINPUT", false);
|
|
}
|
|
|
|
$version_noalyss = NOALYSS_VERSION;
|
|
|
|
// If you don't want to be notified of the update
|
|
if (!defined("SITE_UPDATE"))
|
|
define("SITE_UPDATE", 'https://www.noalyss.eu/last_version.txt');
|
|
if (!defined("SITE_UPDATE_PLUGIN"))
|
|
define("SITE_UPDATE_PLUGIN", 'https://www.noalyss.eu/plugin_last_version.txt');
|
|
if (!defined("NOALYSS_PACKAGE_REPOSITORY")) {
|
|
define("NOALYSS_PACKAGE_REPOSITORY", "https://package.noalyss.eu/");
|
|
}
|
|
// If you don't want that the system information is accessible
|
|
if (!defined("SYSINFO_DISPLAY")) {
|
|
define("SYSINFO_DISPLAY", TRUE);
|
|
}
|
|
define('NOTFOUND', '--not found--');
|
|
define("MAX_COMPTE", 4);
|
|
define('MAX_ARTICLE', 5);
|
|
define('MAX_ARTICLE_STOCK', 10);
|
|
define('MAX_CAT', 15);
|
|
define('MAX_CARD_SEARCH', 550);
|
|
define('MAX_FORECAST_ITEM', 10);
|
|
define('MAX_PREDEFINED_OPERATION', 50);
|
|
define('MAX_COMPTE_CARD', 4);
|
|
define('COMPTA_MAX_YEAR', 2100);
|
|
define('COMPTA_MIN_YEAR', 1900);
|
|
define('MAX_RECONCILE', 25);
|
|
define('MAX_QCODE', 4);
|
|
if (!defined('MAX_SEARCH_CARD')) {
|
|
define('MAX_SEARCH_CARD', 20);
|
|
}
|
|
|
|
define('MAX_FOLDER_TO_SHOW', 80);
|
|
define('MAX_ACTION_SHOW', 20);
|
|
|
|
if (DEBUGNOALYSS == 0) {
|
|
// PRODUCTION : nothing is displaid , report only errors and warning
|
|
// Rapporte les erreurs d'exécution de script
|
|
error_reporting(E_ERROR | E_WARNING);
|
|
ini_set("display_errors", 0);
|
|
ini_set("html_errors", 0);
|
|
ini_set('log_errors', 1);
|
|
ini_set('log_errors_max_len', 0);
|
|
if(function_exists('xdebug_disable')) { xdebug_disable(); }
|
|
} elseif (DEBUGNOALYSS == 1) {
|
|
/* DEVELOPPEMENT : display all errors warning notice deprecated ...*/
|
|
error_reporting(2147483647);
|
|
ini_set("display_errors", 1);
|
|
ini_set("display_startup_errors", 1);
|
|
ini_set("html_errors", 1);
|
|
ini_set('log_errors', 1);
|
|
ini_set('log_errors_max_len', 0);
|
|
} elseif (DEBUGNOALYSS == 2) {
|
|
// like level 1 plus extra info (filename, ...)
|
|
error_reporting(2147483647);
|
|
ini_set("display_errors", 1);
|
|
ini_set("display_startup_errors", 1);
|
|
ini_set("html_errors", 1);
|
|
ini_set('log_errors', 1);
|
|
ini_set('log_errors_max_len', 0);
|
|
|
|
|
|
}
|
|
// Erreur
|
|
define("NOERROR", 0);
|
|
define("BADPARM", 1);
|
|
define("BADDATE", 2);
|
|
define("NOTPERIODE", 3);
|
|
define("PERIODCLOSED", 4);
|
|
define("INVALID_ECH", 5);
|
|
define("RAPPT_ALREADY_USED", 6);
|
|
define("RAPPT_NOT_EXIST", 7);
|
|
define("DIFF_AMOUNT", 8);
|
|
define("RAPPT_NOMATCH_AMOUNT", 9);
|
|
define("NO_PERIOD_SELECTED", 10);
|
|
define("NO_POST_SELECTED", 11);
|
|
define("LAST", 1);
|
|
define("FIRST", 0);
|
|
define("ERROR", 12);
|
|
|
|
//!<ACTION defines document_type for action
|
|
define('ACTION', '1,5,6,7,8');
|
|
|
|
//valeurs standardd
|
|
define("YES", 1);
|
|
define("NO", 0);
|
|
define("OPEN", 1);
|
|
define("CLOSED", 0);
|
|
define("NOTCENTRALIZED", 3);
|
|
define("ALL", 4);
|
|
|
|
// Pour les ShowMenuComptaLeft
|
|
define("MENU_FACT", 1);
|
|
define("MENU_FICHE", 2);
|
|
define("MENU_PARAM", 3);
|
|
|
|
// for the fiche_inc.GetSqlFiche function
|
|
define("ALL_FICHE_DEF_REF", 1000);
|
|
|
|
// fixed value for attr_def data
|
|
define("ATTR_DEF_ACCOUNT", 5);
|
|
define("ATTR_DEF_NAME", 1);
|
|
define("ATTR_DEF_BQ_NO", 3);
|
|
define("ATTR_DEF_BQ_NAME", 4);
|
|
define("ATTR_DEF_PRIX_ACHAT", 7);
|
|
define("ATTR_DEF_PRIX_VENTE", 6);
|
|
define("ATTR_DEF_TVA", 2);
|
|
define("ATTR_DEF_NUMTVA", 13);
|
|
define("ATTR_DEF_ADRESS", 14);
|
|
define("ATTR_DEF_CP", 15);
|
|
define("ATTR_DEF_PAYS", 16);
|
|
define("ATTR_DEF_STOCK", 19);
|
|
define("ATTR_DEF_TEL", 17);
|
|
define("ATTR_DEF_EMAIL", 18);
|
|
define("ATTR_DEF_CITY", 24);
|
|
define("ATTR_DEF_COMPANY", 25);
|
|
define("ATTR_DEF_FAX", 26);
|
|
define("ATTR_DEF_NUMBER_CUSTOMER", 30);
|
|
define("ATTR_DEF_DEP_PRIV", 31);
|
|
define("ATTR_DEF_DEPENSE_NON_DEDUCTIBLE", 20);
|
|
define("ATTR_DEF_TVA_NON_DEDUCTIBLE", 21);
|
|
define("ATTR_DEF_TVA_NON_DEDUCTIBLE_RECUP", 22);
|
|
define("ATTR_DEF_QUICKCODE", 23);
|
|
define("ATTR_DEF_FIRST_NAME", 32);
|
|
define("ATTR_DEF_WEBSITE", 34);
|
|
|
|
define('ATTR_DEF_ACCOUNT_ND_TVA', 50);
|
|
define('ATTR_DEF_ACCOUNT_ND_TVA_ND', 51);
|
|
define('ATTR_DEF_ACCOUNT_ND_PERSO', 52);
|
|
define('ATTR_DEF_ACCOUNT_ND', 53);
|
|
define('ATTR_DEF_ACTIF', 54);
|
|
|
|
define("FICHE_TYPE_CLIENT", 9);
|
|
define("FICHE_TYPE_VENTE", 1);
|
|
define("FICHE_TYPE_FOURNISSEUR", 8);
|
|
define("FICHE_TYPE_FIN", 4);
|
|
define("FICHE_TYPE_CONTACT", 16);
|
|
define("FICHE_TYPE_EMPL", 25);
|
|
define("FICHE_TYPE_ADM_TAX", 14);
|
|
define("FICHE_TYPE_ACH_MAR", 2);
|
|
define("FICHE_TYPE_ACH_SER", 3);
|
|
define("FICHE_TYPE_ACH_MAT", 7);
|
|
define("FICHE_TYPE_PROJET", 26);
|
|
define("FICHE_TYPE_MATERIAL", 7);
|
|
// Max size is defined by default to 2MB,
|
|
if (!defined("MAX_FILE_SIZE")) {
|
|
define("MAX_FILE_SIZE", 2097152);
|
|
}
|
|
/**
|
|
* -- pour utiliser unoconv démarrer un server libreoffice
|
|
* commande
|
|
* libreoffice --headless --accept="socket,host=127.0.0.1,port=2002;urp;" --nofirststartwizard
|
|
* ou
|
|
* unoconv -l -v -s localhost
|
|
*/
|
|
if (!defined('OFFICE')) define('OFFICE', '');
|
|
if (!defined('GENERATE_PDF')) define('GENERATE_PDF', 'NO');
|
|
|
|
/**
|
|
* Pour conversion GIF en PDF
|
|
*/
|
|
$convert_gif_pdf = '/usr/bin/convert';
|
|
if (file_exists($convert_gif_pdf)) {
|
|
define('CONVERT_GIF_PDF', $convert_gif_pdf);
|
|
} else {
|
|
define('CONVERT_GIF_PDF', 'NOT');
|
|
|
|
}
|
|
/**
|
|
* PDF2PS is used when the PDF is broken , used with FIX_BROKEN_PDF
|
|
*/
|
|
$pdf2ps = '/usr/bin/pdf2ps';
|
|
|
|
if (!file_exists($pdf2ps))
|
|
define('PDF2PS', 'NOT');
|
|
else
|
|
define('PDF2PS', $pdf2ps);
|
|
/**
|
|
* PS2PDF is used when the PDF is broken , used with FIX_BROKEN_PDF
|
|
*/
|
|
$ps2pdf = '/usr/bin/ps2pdf';
|
|
|
|
if (!file_exists($ps2pdf))
|
|
define('PS2PDF', 'NOT');
|
|
else
|
|
define('PS2PDF', $ps2pdf);
|
|
|
|
|
|
/**
|
|
* Outil pour manipuler les PDF
|
|
*/
|
|
if (!isset ($pdftk)) {
|
|
$pdftk = '/usr/bin/pdftk';
|
|
}
|
|
if (file_exists($pdftk)) {
|
|
define('PDFTK', $pdftk);
|
|
} else {
|
|
define('PDFTK', 'NOT');
|
|
}
|
|
|
|
// If it is not a mono folder it is a multi one
|
|
if (!defined('MULTI')) {
|
|
define('MULTI', 1);
|
|
}
|
|
|
|
define('JS_INFOBULLE', '
|
|
<DIV id="bulle" class="infobulle"></DIV>
|
|
<script type="text/javascript" language="javascript" src="js/infobulle.js">
|
|
</script>');
|
|
|
|
|
|
// Sql string
|
|
define("SQL_LIST_ALL_INVOICE", "");
|
|
|
|
define("SQL_LIST_UNPAID_INVOICE", " (jr_rapt is null or jr_rapt = '') and jr_valid = true "
|
|
);
|
|
|
|
|
|
define("SQL_LIST_UNPAID_INVOICE_DATE_LIMIT", "
|
|
where (jr_rapt is null or jr_rapt = '')
|
|
and to_date(to_char(jr_ech,'DD.MM.YYYY'),'DD.MM.YYYY') < to_date(to_char(now(),'DD.MM.YYYY'),'DD.MM.YYYY')
|
|
and jr_valid = true");
|
|
|
|
/**
|
|
* Exception
|
|
*/
|
|
// Limit email exceeds parameter
|
|
define('EMAIL_LIMIT', 1002);
|
|
define('EXC_PARAM_VALUE', 1005);
|
|
define('EXC_PARAM_TYPE', 1006);
|
|
define('EXC_DUPLICATE', 1200);
|
|
define('EXC_INVALID', 1400);
|
|
define('EXC_FORBIDDEN', 1500);
|
|
// exception when balance is incorrect when saving an operation
|
|
define('EXC_BALANCE', 1501);
|
|
define("UNPINDG", "");
|
|
define("PINDG", "");
|
|
define("ARROWLEFT","⇦");
|
|
define("ARROWRIGHT","⇨");
|
|
define("ARROWDOWN","⇩");
|
|
define("ARROWUP","⇧");
|
|
// Url of NOALYSS (http://...)
|
|
//
|
|
if (!defined("NOALYSS_URL")) {
|
|
$protocol = "http";
|
|
if (isset ($_SERVER['REQUEST_SCHEME'])) {
|
|
$protocol = $_SERVER['REQUEST_SCHEME'];
|
|
}
|
|
$base = $protocol . '://' .
|
|
$_SERVER['SERVER_NAME'] .
|
|
":" . $_SERVER['SERVER_PORT'] .
|
|
dirname($_SERVER['PHP_SELF']);
|
|
define("NOALYSS_URL", $base);
|
|
}
|
|
if (!defined("DEFAULT_SERVER_VIDEO_CONF")) {
|
|
define("DEFAULT_SERVER_VIDEO_CONF", "https://www.free-solutions.org/");
|
|
}
|
|
|
|
define ("VATCHECK_URL","https://ec.europa.eu/taxation_customs/vies/rest-api/");
|
|
|
|
/**
|
|
* @brief load automatically class
|
|
*
|
|
* @param string $class classname to load
|
|
*/
|
|
function noalyss_class_autoloader($class)
|
|
{
|
|
$class = strtolower($class);
|
|
foreach (array("class","lib","database") as $path) {
|
|
if ( file_exists(NOALYSS_INCLUDE.'/'.$path.'/'.$class.'.class.php')) {
|
|
require_once NOALYSS_INCLUDE.'/'.$path.'/'.$class.'.class.php';
|
|
return;
|
|
}
|
|
}
|
|
|
|
$aClass = array(
|
|
"database" => "class/database.class.php",
|
|
"acc_detail" => "class/acc_operation.class.php",
|
|
"acc_sold" => "class/acc_operation.class.php",
|
|
"acc_misc" => "class/acc_operation.class.php",
|
|
"acc_purchase" => "class/acc_operation.class.php",
|
|
"acc_fin" => "class/acc_operation.class.php",
|
|
"lettering_card" => "class/lettering.class.php",
|
|
"lettering_account" => "class/lettering.class.php",
|
|
"print_ledger_financial" => "class/print_ledger_fin.class.php",
|
|
"anc_key_ledger_sql" => "database/anc_key_sql.class.php",
|
|
"anc_key_detail_sql" => "database/anc_key_sql.class.php",
|
|
"anc_key_activity_sql" => "database/anc_key_sql.class.php",
|
|
"databasecore" => "lib/database_core.class.php",
|
|
"httpinput" => "lib/http_input.class.php",
|
|
"ismallbutton" => "lib/ibutton.class.php",
|
|
"inputswitch" => "lib/input_switch.class.php",
|
|
'noalyss\mobile' => "class/mobile.class.php",
|
|
"htmlinput" => "lib/html_input.class.php",
|
|
'noalyss\dbg'=>"lib/dbg.php",
|
|
'noalyss\file_cache'=>"lib/file_cache.class.php",
|
|
"pdfland"=>"class/pdf_land.class.php",
|
|
"noalyss\widget\widget"=>"widget/widget.php",
|
|
"noalyss\otp"=>"lib/otp.class.php"
|
|
);
|
|
if (isset ($aClass[$class])) {
|
|
require_once NOALYSS_INCLUDE . "/" . $aClass[$class];
|
|
}
|
|
|
|
}
|
|
|
|
spl_autoload_register('\noalyss_class_autoloader', true);
|
|
|
|
require_once NOALYSS_BASE.'/vendor/autoload.php'; |