28require_once NOALYSS_INCLUDE.
'/lib/function_javascript.php';
37 return ( $p_string ===
null)?
"":htmlspecialchars($p_string,
ENT_QUOTES|ENT_HTML5,
'UTF-8',
true);
39function p($p_string, $p_extra=
'')
41 return '<p '.$p_extra.
'>'.$p_string.
"</p.>";
43function span($p_string, $p_extra=
'')
45 return '<span ' . $p_extra .
'>' . $p_string .
'</span>';
50 return '<i>' .
h($p_string) .
'</i>';
55 return '<b>' .
h($p_string) .
'</b>';
58function th($p_string, $p_extra=
'',$raw=
'')
60 return '<th ' . $p_extra .
'>' .
h($p_string).$raw .
'</th>';
65 return '<h2 class="info">' .
h($p_string) .
'</h2>';
68function h2($p_string, $p_class=
"",$raw=
"")
70 return '<h2 ' . $p_class .
'>' . $raw.h($p_string) .
'</h2>';
72function h1($p_string, $p_class=
"")
74 return '<h1 ' . $p_class .
'>' .
h($p_string) .
'</h1>';
83function td($p_string=
'', $p_extra=
'')
85 return '<td ' . $p_extra .
'>' . $p_string .
'</td>';
88function tr($p_string, $p_extra=
'')
90 return '<tr ' . $p_extra .
'>' . $p_string .
'</tr>';
98 $a = preg_replace(
"/\r?\n/",
"\\n", addslashes($p_string));
107function nb($p_number)
110 $r = sprintf(
'%.4f', $p_number);
124 if ( $p_number > 0 ) {
127 $return =($p_number== 0)?
"":
"C";
137function nbm($p_number,$p_dec = 2)
145 $a = doubleval($p_number);
146 $r = number_format(
$a, $p_dec,
",",
".");
171 $msg=
"ERREUR :" . $p_log .
" " . $p_line .
" " . $p_message;
190 date_default_timezone_set(
'Europe/Brussels');
193 $l2_date =
isDate($p_date_oth);
194 if ($l_date ==
null || $l2_date ==
null)
196 throw new Exception(
"erreur date [$p_date] [$p_date_oth]");
198 $l_adate = explode(
".", $l_date);
199 $l2_adate = explode(
".", $l2_date);
200 $l_mkdate = mktime(0, 0, 0, $l_adate[1], $l_adate[0], $l_adate[2]);
201 $l2_mkdate = mktime(0, 0, 0, $l2_adate[1], $l2_adate[0], $l2_adate[2]);
203 return $l_mkdate - $l2_mkdate;
219 if (is_numeric($p_int) ===
true)
240 if (preg_match(
"/^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}$/",
$p_date) == 0)
247 $l_date = explode(
".",
$p_date);
249 if (
sizeof($l_date) != 3)
257 if (checkdate($l_date[1], $l_date[0], $l_date[2]) ==
false)
278 static $already_call=0;
279 if ( $already_call==1)
return;
285 $Res =
$cn->exec_sql(
"select the_filestyle from theme
286 where the_name=$1" ,[$p_theme]);
289 $style =
"style-classic7.css";
299 $style =
"style-classic7.css";
305 if (strpos(
$ac,
'/') <> 0)
307 $m= explode(
'/',
$ac);
317 echo
'<!DOCTYPE html>';
322 echo
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 FINAL//EN" >';
329 $p_script2=
'<script src="'.$p_script2.
'" type="text/javascript"></script>';
333 echo
'<meta charset="utf-8">';
334 echo
"<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
337 echo
' <meta http-equiv="x-ua-compatible" content="IE=edge"/>';
342 <link rel=
"icon" type=
"image/ico" href=
"favicon.ico" />
343 <meta
name=
"viewport" content=
"width=device-width, initial-scale=1.0">
344 <LINK
id=
"bootstrap" REL=
"stylesheet" type=
"text/css" href=
"css/bootstrap.min.css" media=
"screen"/>
345 <LINK
id=
"fontello" REL=
"stylesheet" type=
"text/css" href=
"css/font/fontello/css/fontello.css" media=
"screen"/>
346 <LINK
id=
"pagestyle" REL=
"stylesheet" type=
"text/css" href=
"css/$style?version=$version_noalyss" media=
"screen"/>
347 <link rel=
"stylesheet" type=
"text/css" href=
"css/style-print.css?version=$version_noalyss" media=
"print"/>
351 echo
'<link rel="preload" href="css/font/OpenSansRegular.woff" as="font" crossorigin="anonymous" />';
352 echo
'<link rel="preload" href="css/font/SansationLight/SansationLight.woff" as="font" crossorigin="anonymous" />';
353 echo
'<link rel="preload" href="css/font/fontello/fontello.woff" as="font" crossorigin="anonymous" />';
355 echo
'<script language="javascript" src="js/calendar.js"></script>
356 <script type="text/javascript" src="js/lang/calendar-en.js"></script>';
358 if (isset($_SESSION[SESSION_KEY.
'g_lang']) && $_SESSION[SESSION_KEY.
'g_lang']==
'fr_FR.utf8' )
360 echo
'<script type="text/javascript" src="js/lang/calendar-fr.js"></script>';
362 if (isset($_SESSION[SESSION_KEY.
'g_lang']) && $_SESSION[SESSION_KEY.
'g_lang']==
'nl_NL.utf8' )
364 echo
'<script type="text/javascript" src="js/lang/calendar-nl.js"></script>';
367 <script language="javascript" src="js/calendar-setup.js"></script>
368 <LINK REL="stylesheet" type="text/css" href="css/calendar-blue.css" media="screen">
371 if (isset($_SESSION[SESSION_KEY.
'g_lang']))
385 echo
"<BODY $p_script>";
386 echo
'<div id="info_div"></div>';
387 echo
'<div id="error_div">'.
388 HtmlInput::title_box(
_(
"Erreur"),
'error_div',
'hide').
389 '<div id="error_content_div">'.
391 '<p style="text-align:center">'.
392 HtmlInput::button_action(
'Valider',
'$(\'error_div\').style.visibility=\'hidden\';$(\'error_content_div\').innerHTML=\'\';').
414 $Res =
$cn->exec_sql(
"select the_filestyle from theme
415 where the_name='" . $p_theme .
"'");
417 $style =
"style-classic7.css";
426 $style =
"style-classic7.css";
428 echo
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 FINAL//EN">';
434 $p_script2=
'<script src="'.$p_script2.
'" type="text/javascript"></script>';
438 <TITLE>NOALYSS</TITLE>
439 <META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF8\">
440 <LINK REL=\"stylesheet\" type=\"text/css\" href=\"css/$style\" media=\"screen\">
441 <link rel=\"stylesheet\" type=\"text/css\" href=\"css/style-print.css\" media=\"print\">" .
443 <script src=\"js/prototype.js\" type=\"text/javascript\"></script>
444 <script src=\"js/noalyss_script.js\" type=\"text/javascript\"></script>
445 <script src=\"js/acc_ledger.js\" type=\"text/javascript\"></script>
446 <script src=\"js/smoke.js\" type=\"text/javascript\"></script>
447 <script src=\"export.php?loadjs=message\" type=\"text/javascript\" charset=\"utf-8\"></script>";
449 echo
"<LINK id=\"pagestyle\" REL=\"stylesheet\" type=\"text/css\" href=\"css/font/fontello/css/fontello.css\" media=\"screen\"/>";
457 echo
"<BODY $p_script>";
459 if (basename($_SERVER[
'PHP_SELF']) ==
'user_login.php')
487 echo
"alert ('" .
_(
'Cette action ne vous est pas autorisée Contactez votre responsable') .
"');";
492 echo
'<div class="redcontent">';
493 echo
'<h2 class="error">' .
_(
' Cette action ne vous est pas autorisée Contactez votre responsable') .
'</h2>';
515 $p_string = trim($p_string??
"");
516 if (strlen($p_string) == 0)
540 $class=
"nav-item nav-item-underline";
541 $class_ref=
"nav-link";
542 $p_extra=
"noprint nav nav-pills nav-level3";
547 $class=
"nav-item nav-item-underline";
548 $class_ref=
"nav-link";
549 $p_extra=
"noprint nav nav-pills nav-level2";
554 $class=
"nav-item nav-item-underline";
555 $class_ref=
"nav-link";
556 $p_extra=
'noprint nav nav-pills nav-fill ';
557 $class_div=
"top_menu";
561 $class=
"nav-item nav-item-underline";
562 $class_ref=
"nav-link";
563 $p_extra=
"noprint nav nav-level4";
567 return "<div class=\"$class_div\">"
587function ShowItem(
$p_array, $p_dir=
'V',
$class=
"nav-item", $class_ref=
"nav-link", $default=
"", $p_extra=
"nav nav-pills nav-fill")
597 $ret .=
"<ul class=\"$p_extra \" style=\"display:flex;flex-direction:column\">";
599 $ret .=
"<ul class=\"$p_extra \" >";
605 $javascript = (isset(
$href[4])) ?
$href[4] :
"";
619 $ret.=
'<li class="'.$class.
' li-active "><A class="'.$class_ref.
' active'.
'" HREF="'.$href[0].
'" title="'.
$title.
'" '.$javascript.
'>'.
$href[1].
'</A></li>';
623 $ret.=
'<li class="'.$class.
'"><A class="'.$class_ref.
'" HREF="'.
$href[0].
'" title="'.
$title.
'" '.$javascript.
'>'.
$href[1].
'</A></li>';
644 echo
'<span class="warning">' . $p_string .
'</span>';
660 if (
$pos !=
'p_start' &&
$pos !=
'p_end')
662 echo_error(
'lib/ac_common.php' .
"-" . __LINE__ .
' UNDEFINED PERIODE');
663 throw new Exception(
_(
"paramètre invalide"));
667 throw new Exception(
"Paramètre invalide");
670 $ret = $p_cn->get_value(
"select to_char($pos,'Mon YYYY') as t from parm_periode where p_id=$1",
688 $R = $p_cn->get_value(
"select p_id from parm_periode where
689 to_char(p_start,'DD.MM.YYYY') = $1", array(
'01.'.
$p_date));
705 $p_html = urldecode($p_html);
735function sql_filter_per($p_cn, $p_from, $p_to, $p_form=
'p_id', $p_field=
'jr_tech_per')
738 if ($p_form !=
'p_id' && $p_form !=
'date')
740 echo_error(__FILE__, __LINE__,
'Mauvais parametres ');
746 if ($p_form ==
'p_id')
748 if ( isNUmber($p_from)==0 || isNUmber($p_to)==0){
749 throw new Exception(
"SFP1".
_(
"Nombre invalide").
"\$p_from=$p_from \$p_to=$p_to");
753 $a_start =
$pPeriode->get_date_limit($p_from);
754 $a_end =
$pPeriode->get_date_limit($p_to);
755 if ($a_start==
null||$a_end==
null)
757 throw new Exception(__FILE__.__LINE__.sprintf(
_(
'Attention periode
758 non trouvee periode p_from= %s p_to_periode = %s'), $p_from, $p_to));
762 $p_from = $a_start[
'p_start'];
763 $p_to = $a_end[
'p_end'];
766 throw new Exception(
"SFP2".
_(
"Date invalide").
"\$p_from=$p_from \$p_to=$p_to");
771 $periode=
" $p_field = (select p_id from parm_periode ".
773 " p_start = to_date('$p_from','DD.MM.YYYY')) ";
777 $periode=
"$p_field in (select p_id from parm_periode ".
778 " where p_start >= to_date('$p_from','DD.MM.YYYY') and p_end <= to_date('$p_to','DD.MM.YYYY')) ";
807function set_language()
809 // desactivate local check
810 if (defined("LOCALE")&&LOCALE==0)
814 if (!isset($_SESSION[SESSION_KEY.'g_lang
']))
820 * If translation is not supported by current
822 if (!function_exists("bindtextdomain"))
828 // set differently the language depending of the operating system
831 $dir = setlocale(LC_MESSAGES, $_SESSION[SESSION_KEY.'g_lang
']);
834 $g_lang = 'fr_FR.utf8
';
835 $dir = setlocale(LC_MESSAGES, $g_lang);
836 // echo '<
span class=
"notice">
' . $_SESSION[SESSION_KEY.'g_lang
'] . ' domaine non supporté</h2>
';
838 bindtextdomain('messages
', NOALYSS_HOME.'/lang
');
839 textdomain('messages
');
840 bind_textdomain_codeset('messages
', 'UTF8
');
845 putenv('LANG=
' . $_SESSION[SESSION_KEY.'g_lang
']);
846 $dir = setlocale(LC_ALL, $_SESSION[SESSION_KEY.'g_lang
']);
847 bindtextdomain('messages
', '.\\lang
');
848 textdomain('messages
');
849 bind_textdomain_codeset('messages
', 'UTF8
');
861 $inc_path = get_include_path();
863 if (strpos($inc_path, ";") != 0)
865 $os = 0; /* $os is 0 for windoz */
869 $os = 1; /* $os is 1 for unix */
879function shrink_date($p_date)
881 $date = noalyss_str_replace('.
', '', $p_date);
882 $str_date = substr($date, 0, 4) . substr($date, 6, 2);
890function smaller_date($p_date)
892 if (empty ($p_date)) return "";
893 $str_date = substr($p_date, 0, 6) . substr($p_date, 8, 2);
905function format_date($p_date, $p_from_format = 'YYYY-MM-DD
',$p_to_format='DD.MM.YYYY
')
907 if (empty($p_date)) {return $p_date;}
908 if ($p_from_format == 'YYYY-MM-DD
')
910 $date = explode('-
', $p_date);
911 if (count($date) != 3)
914 if ($p_from_format == 'DD.MM.YYYY
')
916 $temp_date = explode('.
', $p_date);
917 if (count($temp_date) != 3)
919 $date[0] = $temp_date[2]; // 0 is year
920 $date[1] = $temp_date[1]; // 1 for month
921 $date[2] = $temp_date[0]; // 2 for day
924 switch ($p_to_format)
927 $str_date = $date[2] . '.
' . $date[1] . '.
' . $date[0];
930 $str_date = $date[2] . '-
' . $date[1] . '-
' . $date[0];
933 $str_date = $date[0] . '-
' . $date[1] . '-
' . $date[2];
936 $str_date = $date[0] . $date[1] . $date[2];
939 $str_date = $date[0] . '/
' . $date[1] . '/
' . $date[2];
942 $str_date = $date[2] . '.
' . $date[1] . '.
' . substr($date[0],2,2);
945 $str_date = $date[2] . '-
' . $date[1] . '-
' . substr($date[0],2,2);
948 throw new Exception(_("Format Invalide"),1);
960function ajax_disconnected($p_div)
963 echo HtmlInput::title_box(_("Déconnecté"), $p_div);
964 echo h2(_('Données non disponibles
'), 'class=
"error" ');
965 echo h2(_('Veuillez vous reconnecter soit dans une autre fenêtre soit
'
966 . ' en cliquant sur le bouton
'), 'class=
"error"');
968 $reload=new IButton("reload");
969 $reload->value=_("Se connecter");
970 $reload->class="button";
971 $reload->javascript='window.location.reload()
';
972 // Link to log in another tab
973 echo '<
p style=
"text-align:center">
';
974 echo $reload->input();
975 echo HtmlInput::button_close($p_div,'button
');
985function show_module($selected)
988 $cn = Dossier::connect();
989 $amodule = $cn->get_array("select
990 me_code,me_menu,me_url,me_javascript,p_order,me_type,me_description
994 and p_type_display='M
'
995 order by p_order", array($g_user->get_profile()));
999 $selected_module=$cn->get_value('select me_code
from profile_menu where
'
1000 . ' pm_id = $1
', array($selected));
1001 require_once NOALYSS_TEMPLATE.'/module.php
';
1002 $file = $cn->get_array("select me_file,me_parameter,me_javascript,me_type,me_description from v_all_menu
1003 where pm_id=$1 and p_id=$2", array($selected,$g_user->get_profile()));
1004 if ( count($file ) == 0 )
1008 echo '<div
class=
"content">
';
1009 echo_warning(_("Module inexistant")."[ $selected ] ");
1013 if ($file[0]['me_file
'] != '')
1015 if ($file[0]['me_parameter
'] != "")
1017 // if there are paramter put them in superglobal
1018 $array=compute_variable($file[0]['me_parameter
']);
1022 // if file is not a plugin, include the file, otherwise
1023 // include the plugin launcher
1024 if ($file[0]['me_type
'] != 'PL
')
1026 require_once $file[0]['me_file
'];
1030 // nothing : direct call to plugin
1033 if ( $file[0]['me_javascript
'] != '')
1035 create_script($file[0]['me_javascript
']);
1044function find_default_module()
1047 $cn = Dossier::connect();
1049 $default_module = $cn->get_array("select me_code
1050 from profile_menu join profile_user using (p_id)
1052 p_type_display='M
' and
1053 user_name=$1 and pm_default=1", array($g_user->login));
1056 * Try to find the smallest order for module
1058 if (empty($default_module))
1060 $default_module = $cn->get_array("select me_code
1061 from profile_menu join profile_user using (p_id)
1063 p_type_display='M
' and
1064 user_name=$1 order by p_order limit 1", array($g_user->login));
1066 // if no default try to find the default menu
1067 if ( empty ($default_module))
1069 $default_module = $cn->get_array("select me_code
1070 from profile_menu join profile_user using (p_id)
1072 p_type_display='E
' and
1073 user_name=$1 and pm_default=1 ", array($g_user->login));
1075 * Try to find a default menu by order
1077 if (empty ($default_module))
1079 $default_module = $cn->get_array("select me_code
1080 from profile_menu join profile_user using (p_id)
1082 user_name=$1 and p_order=(select min(p_order) from profile_menu join profile_user using (p_id)
1083 where user_name=$2) limit 1", array($g_user->login, $g_user->login));
1087 * if nothing found, there is no profile for this user => exit
1089 if (empty ($default_module))
1092 * If administrateur, then we insert a default profile (1)
1095 if ( $g_user->admin == 1 )
1097 $cn->exec_sql('insert into profile_user(user_name,
p_id) values ($1,1)
',array($g_user->login));
1098 return find_default_module();
1100 echo_warning(_("Utilisateur n'a pas de profil, votre administrateur doit en configurer un dans C0SEC
"));
1104 return $default_module[0]['me_code'];
1107 if (count($default_module) > 1)
1109 // return the first module found
1110 return $default_module[0]['me_code'];
1112 elseif (count($default_module) == 1)
1114 return $default_module[0]['me_code'];
1123function show_menu($module)
1125 if ($module == 0)return;
1126 global $level, $g_user;
1127 $http=new HttpInput();
1128 $access_code=$http->request("ac
");
1129 $cn = Dossier::connect();
1133 $amenu = $cn->get_array("
1143 me_description_etendue
1145 join menu_ref
using (me_code)
1146 where pm_id_dep=$1 and
p_id=$2
1147 order by p_order
", array($module, $g_user->get_profile()));
1149 // There are submenuS, so show them
1150 if (!empty($amenu) && count($amenu) > 1)
1152 $a_style_menu=array('topmenu','menu2','menu3');
1153 if ( $level >= count($a_style_menu))
1154 $style_menu='menu3';
1156 $style_menu=$a_style_menu[$level];
1158 require NOALYSS_TEMPLATE.'/menu.php';
1161 } elseif (count($amenu) == 1)
1163 // there is only one submenu so we include the code or javascript
1164 // or we show the submenu
1165 if ( trim($amenu[0]['me_url']??"") != "" ||
1166 trim ($amenu[0]['me_file']??"") != "" ||
1167 trim ($amenu[0]['me_javascript']??"") != "" )
1169 echo '<div class="topmenu
">';
1170 echo h2info(_($amenu[0]['me_menu']));
1172 $module = $amenu[0]['pm_id'];
1173 display_menu($module);
1177 $url=$access_code.'/'.$amenu[0]['me_code'];
1178 echo '<a href="do.php?gDossier=
'.Dossier::id().'&ac=
'.$url.'">';
1179 echo _($amenu[0]['me_menu']);
1186 // !!! this point should never be reached
1187 // There is no submenu or only one
1188 if (empty($amenu) || count($amenu) == 1)
1190 display_menu($module);
1201function display_menu($p_menuid)
1203 if ($p_menuid == 0) return;
1205 $cn=Dossier::connect();
1207 $file = $cn->get_array("
1208 select me_file,me_parameter,me_javascript,me_type
1210 join profile_menu
using (me_code)
1211 join profile_user
using (
p_id)
1215 (me_file is not
null or trim(me_file) <>
'' or
1216 me_javascript is not
null or trim (me_javascript) <>
'')
", array($p_menuid,$g_user->login));
1218 if (count($file)==0)
1223 if ($file[0]['me_file'] != "")
1225 if ($file[0]['me_parameter'] !== "")
1227 // if there are paramter put them in superglobal
1228 $array=compute_variable($file[0]['me_parameter']);
1231 \Noalyss\Dbg::echo_var(1,$file[0]['me_file']." ".$file[0]['me_parameter']);
1233 * Log the file we input to put in the folder test-noalyss for replaying it
1236 $file_loginput=fopen($_ENV['TMP'].'/scenario-'.$_SERVER['REQUEST_TIME'].'.php','a+');
1237 fwrite($file_loginput, "include
'".$file[0]['me_file
']."';
");
1238 fwrite($file_loginput,"\
n");
1239 fclose($file_loginput);
1241 // if file is not a plugin, include the file, otherwise
1242 // include the plugin launcher
1243 if ( $file[0]['me_type'] != 'PL') {
1244 if (file_exists ($file[0]['me_file']) )
1246 require_once $file[0]['me_file'];
1247 } elseif ( file_exists(NOALYSS_INCLUDE.'/'.$file[0]['me_file'])) {
1248 require_once NOALYSS_INCLUDE.'/'.$file[0]['me_file'];
1250 echo echo_warning(_("Fichier non trouvé
"));
1253 require 'extension_get.inc.php';
1257 } elseif ( $file[0]['me_javascript'] != '')
1259 $js= noalyss_str_replace('<DOSSIER>', dossier::id(), $file[0]['me_javascript']);
1260 echo create_script($js);
1268function header_csv($p_filename)
1271 header('Pragma: public');
1272 header('Content-type: application/csv');
1273 header("Content-Disposition: attachment;filename=\
"{$p_filename}\"",
1275 header(
'Cache-Control: no-store, no-cache, must-revalidate');
1276 header(
'Expires: Sun, 1 Jan 2000 12:00:00 GMT');
1277 header(
'Last-Modified: '.gmdate(
'D, d M Y H:i:s').
'GMT');
1304 if ($p_string ==
'')
return $array;
1306 $var=explode(
"&",$p_string);
1310 $var2=explode(
'=',
$var[
$i]);
1319 header(
'Content-type: text/xml; charset=UTF-8');
1321<?xml version=
"1.0" encoding=
"UTF-8"?>
1335 if ( isset(
$r[$key])) {
1371 throw new Exception(
'Ledger type not found');
1381 if ( strpos ($_SERVER[
'HTTP_USER_AGENT'],
'MSIE 8.0') != 0 ||
1382 strpos ($_SERVER[
'HTTP_USER_AGENT'],
'MSIE 9.0') != 0 )
1395 $date= date (
'Y-m-d');
1397 $handle_log=fopen(NOALYSS_BASE.
"/log/noalyss-{$date}.log",
"a+");
1399 if ($handle_log ==
false )
1401 if ( isset ($_SERVER[
'REMOTE_ADDR']) ) error_log(sprintf(
"origin %s\n",$_SERVER[
'REMOTE_ADDR']));
1402 if ( isset ($_SERVER[
'HTTP_USER_AGENT']) ) error_log(sprintf(
"agent %s\n",$_SERVER[
'HTTP_USER_AGENT']));
1403 if ( gettype ($p_message) ==
"object" && method_exists($p_message,
"getTraceAsString") == 1) {
1406 error_log(
"noalyss exception File [".$exc->getFile().
":".$exc->getLine().
"]",0);
1407 error_log(
"noalyss exception Message [".$exc->getMessage().
"]",0);
1408 error_log(
"noalyss exception Code [".$exc->getCode().
"]",0);
1409 error_log(
"noalyss exception Trace ".$exc->getTraceAsString(),0);
1410 error_log(
"------ ",0);
1411 $exc=$exc->getPrevious();
1412 if ($exc !=
null )fwrite ($handle_log,
"*********************** Previous *********************** \n");
1413 }
while ($exc !=
null);
1415 error_log(
"noalyss".var_export($p_message,
true),0);
1418 error_log(
"noalyss GET [".json_encode(
$_GET,0,10).
"]");
1419 error_log(
"_POST [".json_encode(
$_POST,0,10).
"]",0);
1421 if ( isset ($_SERVER[
'REMOTE_ADDR']) ) fwrite($handle_log,sprintf(
"origin %s\n",$_SERVER[
'REMOTE_ADDR']));
1422 if ( isset ($_SERVER[
'HTTP_USER_AGENT']) ) fwrite($handle_log,sprintf(
"agent %s\n",$_SERVER[
'HTTP_USER_AGENT']));
1424 if ( gettype ($p_message) ==
"object" && method_exists($p_message,
"getTraceAsString") == 1) {
1426 error_log(
"noalyss exception ".$p_message->getMessage(),0);
1427 error_log(
"noalyss exception".$p_message->getTraceAsString(),0);
1429 error_log(
"noalyss".var_export($p_message,
true),0);
1433 $now=date (
'Y-m-d H:i:s');
1434 fwrite ($handle_log,str_repeat(
"=", 80).
"\n");
1435 fwrite ($handle_log,
"ERROR: {$now}\n");
1436 fwrite($handle_log,
"noalyss GET [".var_export(
$_GET,
true).
"]");
1437 fwrite ($handle_log,
"\n");
1438 fwrite($handle_log,
"_POST [".var_export(
$_POST,
true).
"]");
1439 fwrite ($handle_log,
"\n");
1440 if ( gettype ($p_message) ==
"object" && method_exists($p_message,
"getTraceAsString") == 1) {
1443 fwrite($handle_log,
"noalyss exception File [".$exc->getFile().
":".$exc->getLine().
"]");
1444 fwrite ($handle_log,
"\n");
1445 fwrite($handle_log,
"noalyss exception Message [".$exc->getMessage().
"]");
1446 fwrite ($handle_log,
"\n");
1447 fwrite($handle_log,
"noalyss exception Code [".$exc->getCode().
"]");
1448 fwrite ($handle_log,
"\n");
1449 fwrite($handle_log,
"noalyss exception Trace \n".$exc->getTraceAsString());
1450 fwrite ($handle_log,
"\n");
1451 $exc=$exc->getPrevious();
1452 if ($exc !=
null )fwrite ($handle_log,
"*********************** Previous *********************** \n");
1453 }
while ($exc !=
null);
1455 fwrite($handle_log,
"noalyss".var_export($p_message,
true));
1456 fwrite ($handle_log,
"\n");
1460 fwrite ($handle_log,str_repeat(
"=", 80).
"\n");
1461 fclose($handle_log);
1466if(!function_exists(
'tracedebug')) {
1469 $tmp_file = sys_get_temp_dir().DIRECTORY_SEPARATOR.$file;
1470 $file_loginput=fopen( $tmp_file,
'a+');
1471 if ( $file_loginput ==
false) {
return;}
1477 if ( gettype (
$var) ==
'object' && get_class(
$var)==
'DOMDocument')
1479 $var->formatOutput=
true;
1486 file_put_contents($tmp_file,
$output, FILE_APPEND);
1497 $p_string2=mb_convert_encoding($p_string,
'ISO-8859-1',
'UTF-8');
1498 $p_string2=iconv(
'UTF-8',
'ISO-8859-1//IGNORE',$p_string);
1503 if (ord($p_string[
$i]) < 127 ) {
1506 $result.=
'\u'.ord($p_string[
$i]).chr(92).chr(39).
'3f';
1523 $p_formula=preg_replace(
"![0-9]+\.*[0-9]*/0\.{0,1}0*(\+|-|\*|/|;){1}!",
"0$1",$test);
1524 $p_formula=trim($p_formula,
';');
1536 $chaine=
"abcdefghijklmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY0123456789*/+-=";
1538 $chaine=
"abcdefghijklmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY0123456789";
1539 $microtime=microtime(
true)*microtime(
true)*100;
1541 srand((
int)$microtime);
1542 for (
$i=0;
$i<$p_length;
$i++)
1544 $string .= $chaine[rand()%strlen($chaine)];
1559 $r = HtmlInput::hidden(
"ctlcode",
$code);
1560 $r.=
'<span style="margin-left:1.2em;margin-right:1.2em;font-size:120%;font-weight:bold;border:navy solid 1px ; padding:0.5rem">'.
$code.
'</span>';
1571 $cn=Dossier::connect();
1572 $sql =
' select pm_id from profile_menu where pm_default =1 and pm_id_dep = $1';
1573 $aresult=
$cn->get_array(
$sql, [$pn_menu]);
1574 if (empty($aresult)) {
1577 return $aresult[0][
'pm_id'];
1598 if ($pa_menu[0][
'pm_id_v2'] == 0) {
1601 $a_result[0][
'pm_id_v2']=$pa_menu[0][
'pm_id_v1'];
1602 $a_result[0][
'pm_id_v1']=
$tmp;
1605 if ($pa_menu[0][
'pm_id_v3'] == 0) {
1608 $a_result[0][
'pm_id_v3']=$a_result[0][
'pm_id_v2'];
1609 $a_result[0][
'pm_id_v2']=$a_result[0][
'pm_id_v1'];
1610 $a_result[0][
'pm_id_v1']=
$tmp;
1622 if ( empty ($pan_code)) {
return;}
1624 $cn=Dossier::connect();
1625 $an_code=[
'pm_id_v3',
'pm_id_v2',
'pm_id_v1'];
1630 $s_result.=
$sep.$cn->get_value(
"select me_code from profile_menu where pm_id=$1",[ $pan_code[0][
$ix] ]);
1631 $sep=($s_result !=
"" )?
"/":
"";
1642 $ret=preg_replace(
"!http[s]{0,1}://[[:graph:]*]*!",
'<a href="\\0" target="_blank">\0</a>',
$text);
1655 else return strlen($p_string);
1658 if ($p_string===
null)
return "";
1659 else return trim($p_string);
1663 return strlen(trim($p_string));
1666 if (
$string===
null)
return "";
1671 $p_first=(empty($p_first))?0:$p_first;
1672 $p_second=(empty($p_second))?0:$p_second;
1673 return bcsub($p_first,$p_second,$p_decimal);
1677 $p_first=(empty($p_first))?0:$p_first;
1678 $p_second=(empty($p_second))?0:$p_second;
1679 return bcadd($p_first,$p_second,$p_decimal);
1683 if ($p_string===
null)
return "";
1684 return strip_tags($p_string);
1688 $p_first=(empty($p_first))?0:$p_first;
1689 $p_second=(empty($p_second))?0:$p_second;
1690 return bcmul($p_first??0,$p_second??0);
1694 $p_first=(empty($p_first))?0:$p_first;
1695 $p_second=(empty($p_second))?0:$p_second;
1696 return round($p_first??0,$p_second??0);
1706 if (
$string===
null)
return '';
1707 return explode($separator,
$string);
1715 if (!empty($p_tel)) {
1716 $r=sprintf(
'<a href="tel:%s">%s</a>',
h($p_tel),
h($p_tel));
1728 if (empty($p_email ))
return "";
1729 $nComma=preg_match(
"/,/",$p_email);
1731 $aEmail=explode(
",",$p_email);
1733 $aEmail[0]=$p_email;
1736 foreach ($aEmail as $email) {
1737 if ( filter_var(trim($email),FILTER_VALIDATE_EMAIL) ) {
1738 $r.=sprintf(
'<a href="mailto:%s">%s</a> ',
h($email),
h($email));
1740 $r.=sprintf(
"%s",
h($email));
1755 if (!empty($p_tel)) {
1756 $r=sprintf(
'<a href="fax:%s">%s</a>',
h($p_tel),
h($p_tel));
1763 if (empty(
$p_url) )
return "";
1764 if (filter_var(trim(
$p_url,FILTER_VALIDATE_URL)) ) {
1765 return sprintf(
'<a href="%s" target="_blank">%s</a>',
$p_url,
$p_url);
1777 if ( file_exists(NOALYSS_BASE.
"/".$p_file )) {
1778 include NOALYSS_BASE.
"/".$p_file;
1814 $error_code=array();
1816 $len=strlen($password??
"");
1818 $errors[] =
_(
"mot de passe de 8 lettres minimum");
1822 if (!preg_match(
"#[0-9]+#", $password)) {
1823 $errors[] =
_(
"mot de passe doit inclure au moins un chiffre");
1827 if (!preg_match(
"#[a-z]+#", $password)) {
1828 $errors[] =
_(
"mot de passe doit inclure au moins une minuscule");
1831 if (!preg_match(
"#[A-Z]+#", $password)) {
1832 $errors[] =
_(
"mot de passe doit inclure au moins une majuscule");
1837 $cnt_diff=count(count_chars($password,1));
1838 $ratio_diff=$len/$cnt_diff;
1840 if ($ratio_diff > 2) {
1841 $errors[] =
_(
"Trop souvent le(s) même(s) symbole(s)");
1844 $special_char=preg_replace(
'/[[:alnum:]]/',
'',$password);
1845 if ( strlen($special_char??
"")==0)
1847 $errors[] =
_(
"mot de passe doit inclure au moins un caractére spécial '+-/*[...'");
1853 return array(
'msg'=>$errors,
'code'=>$error_code);
1863 $car=($car < 8 )?8:$car;
1864 $max_loop=20;$loop=0;
1869 $chaine=
"abcdefghijklmnpqrstuvwxy";
1871 for (
$i=0;
$i<$car;
$i++)
1873 $string .= $chaine[rand()%strlen($chaine)];
1875 $chaine=
"ABCDEFGHIJKLMNPQRSTUVWXY";
1877 $string[rand()%$car]=$chaine[rand()%strlen($chaine)];;
1879 $chaine=
"0123456789";
1881 $string[rand()%$car]=$chaine[rand()%strlen($chaine)];;
1883 $special_set=
"+-/*;,.=:&()[]";
1884 $special_car=$special_set[rand()%strlen($special_set)];
1885 $string[rand()%$car]=$special_car;
1900 $pos_prefix=strrpos($filename,
".");
1903 $filename_suff=
".pdf";
1904 $filename.=$filename_suff;
1905 $pos_prefix=strrpos($filename,
".");
1908 $filename_suff=substr($filename, $pos_prefix, strlen($filename));
1910 $filename=str_replace(array(
'/',
'*',
'<',
'>',
';',
',',
'\\',
'.',
':',
'(',
')',
' ',
'[',
']'),
"-", $filename);
1912 $filename_no=substr($filename, 0, $pos_prefix);
1914 $new_filename=strtolower($filename_no).
"-".date(
"Ymd-Hi").$filename_suff;
1916 $new_filename=strtolower($filename_no).$filename_suff;
1918 return $new_filename;
1936 return vsprintf(
'%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex(
$data), 4));
1946 if ( count(
$array) == 0 ) {
return -1; }
1958 global $aLetter,$aLetterValue;
1960 static $make_string=
null;
1961 if ( $make_string ==
null ) {
1962 for (
$i=65;
$i!=91;
$i++) {
1963 $make_string[chr(
$i)]=
$i-55;
1965 $aLetter=array_keys($make_string);
1966 $aLetterValue=array_values($make_string);
1976 global $aLetter, $aLetterValue;
1977 if (trim($iban ??
"") ==
"")
1983 static $make_string,$aLetter, $aLetterValue=
null;
1985 if ( $make_string ==
null )
1989 $make_string[chr(
$i)]=
$i-55;
1991 $aLetter=array_keys($make_string);
1992 $aLetterValue=array_values($make_string);
1995 $iban = strtoupper($iban);
1996 $iban=str_replace([
" ",
",",
".",
"-"],
'', $iban);
1998 $first = substr($iban, 0, 4);
1999 $chain = substr($iban, 4) . $first;
2001 $replaced = str_replace($aLetter, $aLetterValue, $chain);
2007 $length = strlen($replaced);
2010 $slice_string =
$result . substr($replaced,
$start, $slice);
2028 if ($p_value==
"")
return 0;
2029 $a_convert=[
"k"=>1024,
"m"=>1024**2,
"g"=>1024**3];
2031 $p_value=trim($p_value);
2032 $last=strtolower($p_value[strlen($p_value)-1]);
2033 $p_value=substr($p_value,0,strlen($p_value)-1);
2034 if ( isset($a_convert[
$last])) {
2035 $p_value=$p_value*$a_convert[
$last];
2048 if (count(
$array) == 0 )
return null;
2049 $a_ret=array();
$i=0;
2051 $a_ret[
$i][
'value']=$key;
noalyss_bcsub($p_first, $p_second, $p_decimal=4)
noalyss_round($p_first, $p_second)
noalyss_bcadd($p_first, $p_second, $p_decimal=4)
ajax_xml_error($p_code, $p_string)
transform_sql_filter_per($p_sql)
transform the SQL for ANALYTIC table operation_analytique
sanitize_filename($filename, $with_date=true)
removed invalid character when computing a filename, the suffix is kept
h2($p_string, $p_class="", $raw="")
FormatString($p_string)
replaced by sql_string
complete_default_menu($pa_menu)
Check if there is a default menu for this user and add it.
compute_variable($p_string)
the string has the format a=b&c=d, it is parsed and an array[][key,value] is returned
noalyss_strlen($p_string)
phoneTo($p_tel)
compose a HTML string with phone
th($p_string, $p_extra='', $raw='')
check_iban(&$iban)
check that an IBAN is valid
MaintenanceMode($p_file)
When you want to prevent users to connect, create a file in noalyss/ (NOALYSS_BASE) with the message ...
sql_filter_per($p_cn, $p_from, $p_to, $p_form='p_id', $p_field='jr_tech_per')
Create the condition to filter on the j_tech_per thanks a from and to date.
confirm_with_string($p_ctl_name, $p_car)
generate a string of p_car character and a input text with name p_ctl_name work like a kind of captch...
noalyss_explode($separator, $string)
to avoid deprecated in PHP8.1 : explode cannot use a null
mailTo($p_email)
compose a HTML string with email
findSide($p_number)
return D if the number is smaller than 0 , C if bigger and an empty string if equal to 0.
getPeriodeFromMonth($p_cn, $p_date)
Return the period corresponding to the date.
put_global($array)
Put in superglobal (get,post,request) the value contained in the parameter field (me_parameter)
noalyss_strip_tags($p_string)
span($p_string, $p_extra='')
isDate($p_date)
Verifie qu'une date est bien formaté en d.m.y et est valable.
guidv4($data=null)
generate an UUID
get_array_column($p_array, $key)
getPeriodeName($p_cn, $p_id, $pos='p_start')
Show the periode which found thanks its id.
find_default_menu($pn_menu)
Find the menu marked as default in the given profile.
noalyss_strlentrim($p_string)
html_page_start($p_theme="", $p_script="", $p_script2="")
Default page header for each page.
echo_warning($p_string)
warns
Decode($p_html)
Decode the html for the widegt richtext and remove newline.
p($p_string, $p_extra='')
ShowItem($p_array, $p_dir='V', $class="nav-item", $class_ref="nav-link", $default="", $p_extra="nav nav-pills nav-fill")
store the string which print the content of p_array in a table used to display the menu
h1($p_string, $p_class="")
show_menu_extension($p_array, $default="", $p_extra="")
Same menu for all extensions, with the right level, it calls ShowItem with the right parameters @glob...
rebuild_access_code($pan_code)
rebuild the access code
check_password_strength($password)
returns an double array with the error found and code , if the count is 0 then the password is very s...
convert_array_select($array)
convert an array KEY=>VALUE into a double array useable by \ISelect
html_min_page_start($p_theme="", $p_script="", $p_script2="")
Minimal page header for each page, used for small popup window.
noalyss_str_replace($search, $replace, $string)
find_idx($array, $key, $value)
retrieve the index for the key percent, returns -1 if nothing found
NoAccess($js=1)
Echo no access and stop.
echo_error($p_log, $p_line="", $p_message="")
log error into the /tmp/noalyss_error.log it doesn't work on windows
tr($p_string, $p_extra='')
remove_divide_zero($p_formula)
When it is needed to eval a formula , this function prevent the divide by zero.
generate_random_password($car)
generate a strong random password
add_http_link($text)
Transform a http link into a clickable link.
record_log($p_message)
Record an error message into the log file of the server or in the log folder of NOALYSS Record also t...
noalyss_bcmul($p_first, $p_second)
sql_string($p_string)
Fix the problem with the quote char for the database.
nb($p_number)
format the number for the CSV export
td($p_string='', $p_extra='')
surround the string with td
FaxTo($p_tel)
compose a HTML string with fax
nbm($p_number, $p_dec=2)
format the number with a sep.
generate_random_string($p_length, $special=1)
Create randomly a string.
cmpDate($p_date, $p_date_oth)
Compare 2 dates.
if(!function_exists( 'tracedebug')) convert_to_rtf($p_string)
encode the string for RTF, return a string
j($p_string)
escape correctly php string to javascript
convert_ini_unit($p_value)
convert a value in Mbytes, kb ... in byte
alert($p_msg, $buffer=false)
alert in javascript
is_msie()
Check if we use IE 8 or 9.
factory_Ledger(Database &$p_cn, $ledger_id)
This function create a ledger object and return the right one.
if(headers_sent() &&DEBUGNOALYSS > 0) $html
catch(Exception $exc) if(! $g_user->can_write_action($ag_id)) $r
h( $row[ 'oa_description'])
if(!headers_sent())
– pour utiliser unoconv démarrer un server libreoffice commande libreoffice –headless –accept="socket...
if(isNumber($jr_id)==0) $ledger_id
for( $i=0;$i< $nb_match;$i++) if(empty($result)) $nb_result
if(trim($query)==''|| $filter=='') $search
if(isset( $_REQUEST[ 'show'])) if(isset($_REQUEST['del'])) $ac
if(! empty( $error)) for($i=0;$i< count($error);$i++)( $last !=$error[$i]) $last
_("actif, passif,charge,...")
else $card content[$j]['j_montant']
$class
Display the Plugin and for each profile were it is installed or not.
the class Acc_Ledger_Fin inherits from Acc_Ledger, this object permit to manage the financial ledger
: input, confirm and save new operations in edger of purchase the $_POST data is an array with these ...
: input, confirm and save new operations in edger of sales the $_POST data is an array with these key...
Class for jrn, class acc_ledger for manipulating the ledger AND some acc.
static fetch_array($ret, $p_indice=0, $p_mode=PGSQL_ASSOC)
wrapper for the function pg_fetch_array
static num_row($ret)
wrapper for the function pg_num_rows
contains the class for connecting to Noalyss
static warnbulle($p_comment)
Display a warning in a bubble, text is in message_javascript.
Contains some parameters to change appearance of noalyss, the colors are saved into the table parm_ap...
if($request_jrn !="" && $g_user->check_jrn($request_jrn) !='W' $p_msg)
if(sizeof($array)==0) $pPeriode
for($e=0; $e< count($afiche); $e++) exit
load_all_script()
load all the javascript only one time
escape_xml($p_xml)
When data are transfered thanks ajax in a xml document, the xml can not contains some character,...