Merge branch 'unstable' into pre-stable

* unstable: (63 commits)
  Mantis #2451: Ajouter QCode des clients et fournisseurs dans objets du tableau de bord
  Cannot save bookmark
  Cosmetic : readonly background and section payment means
  Border-color Cosmetic
  Cosmetic : readonly background and section payment means
  Border-color Cosmetic
  logfile only if SYSINFO_DISPLAY is true
  Version 10.1
  Fix cosmetic
  Cosmetic : use an icon before warning
  remove direct access to $_GET
  Postgresql 12 compatibility
  Security tigh
  New : allow to see and download logfile
  Fix Bug chrome : cannot save operation details
  FOLLOW-UP: improve appearance
  FREC : upload file properly and cancel operation if it fails
  UBL21: check invalid PEPPOL ID
  Fix :  issue when using unicode with substr
  Cosmetic message1 and fix nav-item typo
  ...
This commit is contained in:
sparkyx 2026-03-06 08:50:45 +01:00
commit 8d14ed801d
59 changed files with 812 additions and 266 deletions

View file

@ -72,13 +72,17 @@ BODY {
--bg-inner-box:#DCE1EF;
--underline-menu:#d7e8ee;
--bg-slide:#c5d5e8;
--end-level1:#eb7c7e;
--border-color:#b7b7b7;
--bg-white:white;
--bg-readonly:#f9f9f9;
}
input{
font-family: 'OpenSansRegular';
padding : 2px;
margin:2px;
border:1px solid var(--input-color);
border:1px solid var(--border-color);
background-color:var(--bg-white);
color:var(--input-color);
}
@ -111,6 +115,7 @@ p.notice,span.notice {
margin-left: 5ch;
border:1px solid transparent;
border-radius: 5px;
text-align: center;
}
.valid {
color:green;
@ -805,12 +810,12 @@ a.document:hover {
}
.input_text_ro {
border:1px solid #0000FF;
background:#EDEDED;
color:#0000FF;
background-color:var(--bg-readonly);
border-radius: 5px;
margin:1px;
}
.input_text {
border:1px solid var(--input-color);
border:1px solid var(--border-color);
margin:1px;
border-radius: 5px;
}
@ -854,9 +859,9 @@ fieldset fieldset legend {
color:#888;
}
select {
border: 1px solid #0000FF;
border: 1px solid var(--border-color);
margin:2px;
background-color:#FFFFFF;
background-color:var(--bg-white);
border-radius: 3px;
padding: 3px;
}
@ -2051,9 +2056,9 @@ td.workday ol {
}
input.inum {
text-align:right;
border:1px solid var(--input-color);
margin:2px;
border-radius: 5px;
border:1px solid var(--border-color);
}
div.box {
background-color:#e4e7ed;
@ -2089,7 +2094,7 @@ div.box {
div.box {
width: 35rem;
max-height: 30%;
height: 45vh;
height: 40rem;
}
}
@ -2186,7 +2191,7 @@ margin-left: 0px;
.inner_box li.tabs:hover ,li.tabs:hover {
display:inline;
background-color: lightblue;
color:wheat;
color:var(--bg-white);
margin-left: 2px;
padding: 5px;
border-top-left-radius: 10px;
@ -2211,7 +2216,7 @@ margin-left: 2px;
.inner_box li.tabs:hover ,li.tabs:hover {
display:inline;
background-color: lightblue;
color:wheat;
color:var(--bg-white);
margin-left: 2px;
padding: 15px 7px 10px 10px;
border-top-left-radius: 5px;
@ -2336,21 +2341,21 @@ hr {
******************************************************************************/
li.highlight,tr.highlight{
font-weight: bolder;
font-size:90%;
background-color: #8A8787;
color:whitesmoke !important;
font-size:100%;
font-size:1rem;
background-color: lightsteelblue;
color:var(--bg-white) !important;
border-width: 2px;
border-style: solid;
/*! border-color: blue; */
}
li.highlight a,tr.highlight a{
color:whitesmoke !important;
color:var(--bg-white) !important;
}
*|*:link {
color: inherit;
}
/*****************************************************************************
* Table of one column to present menu
* as in CFGLED, FORECAST, REPORT
@ -2500,6 +2505,8 @@ ul.aligned-block li {
padding: 2rem;
border:1px solid navy;
margin-right:1rem;
width: 20rem;
}
/***************************************************************************
* column in the dashboard
@ -2513,6 +2520,7 @@ td.cut {
}
td.box {
border-left: #9999ff solid 1px;
border-radius: 10px 0px;
}
/****************************************************************************
@ -2700,7 +2708,7 @@ td.selectedmenu {
.field_follow_up
{
margin-top:1px;
border:1px solid blue;
border:1px solid var(--border-color);
min-height: 5rem;
}
@ -2988,6 +2996,11 @@ div.progressbar {
/**
* Warning
*/
span.warning::before {
content: '\e806';
font-family: "fontello" !important;
font-weight:normal;
}
span.warning {
color:white;
font-style: normal;
@ -2999,6 +3012,7 @@ span.warning {
animation-duration: 4s;
animation-iteration-count: infinite;
display: block;
border-radius: 10px;
}
/**********************************************************************************************************************/
/* LI as list
@ -3062,7 +3076,7 @@ span.warning {
li.tab_row:hover {
display:block;
background-color: lightblue;
color:wheat;
color:var(--bg-white);
margin-left: 2px;
padding: 5px;
border-top-left-radius: 10px;
@ -3085,7 +3099,7 @@ margin-left: 2px;
li.tab_row:hover {
display:block;
background-color: lightblue;
color:wheat;
color:var(--bg-white);
margin-left: 2px;
padding: 20px 15px 15px 20px;
margin: 20px 15px 15px 15px;
@ -3781,7 +3795,7 @@ margin:1px;
div.concerned_action {
height: 11rem;
overflow: auto;
background-color: white;
background-color: var(--bg-white);
border:navy 1px solid;
width: 100%;
scroll-padding-right: 20px;
@ -3957,7 +3971,8 @@ h2.h-section {
content:'';
left:0;
bottom:0;
right:0;3 position:absolute;
right:0.3;
position:absolute;
height:var(--border-size);
background-color:red;
transform:scaleX(0);
@ -3973,8 +3988,7 @@ h2.h-section {
.nav-item.li-active.nav-item-underline::before {
transform: scale(1);
background-color: #d03100;
background-image: linear-gradient(to right,#cc0000 0%,red 20%) ;
background-image: linear-gradient(to right,darkred 0%,red 10%,red 90%,darkred);
background-image: linear-gradient(to right,var(--end-level1) 0%,red 10%,red 90%,var(--end-level1));
}
/**
@ -4171,7 +4185,7 @@ h2.h-section {
}
.topmenu .nav-item.nav-item-underline:hover::before,.topmenu .nav-item.nav-item-underline:focus::before {
transform: scaleX(1) scaleY(1);
background-image: linear-gradient(to right,darkred,red);
background-image: linear-gradient(to right,var(--end-level1),red);
}
@ -4182,7 +4196,7 @@ h2.h-section {
.topmenu .nav-item.nav-item-underline:hover::before,.topmenu .nav-item.nav-item-underline:focus::before {
transform: scaleX(1) scaleY(1);
background-image: linear-gradient(to right,darkred 0%,red 30%);
background-image: linear-gradient(to right,var(--end-level1) 0%,red 30%);
}
/*.topmenu .nav-item.nav-item-underline::before {
@ -4258,6 +4272,8 @@ span.nb-round {
.bt-center {
margin-bottom: 2rem;
float:inherit;
clear:both;
}
@ -4287,4 +4303,35 @@ span.nb-round {
#module_setting .selectedcell {
background-color:beige;
}
}
#facturation_div_id{
height:auto;
float:left
}
#ag_title {
width:80%;
}
#message1 {
text-align: center;
padding: 10px;
}
.inner_box div.fu_comment_div {
padding-left: 1rem;
padding-right: 1rem;
}
.field_follow_up {
padding: 1rem;
border-radius: 10px;
}
.field_follow_up {
background-color: var(--bg-white);
}

View file

@ -12,7 +12,7 @@
* 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
@ -39,7 +39,7 @@ if ( ! $g_user->is_double_identified()) {
exit();
}
$g_user->check_dossier($http->get('gDossier'));
$res=$cn->exec_sql("select distinct code,coalesce(description,code) description from get_profile_menu($1) where code ~* $2 or description ~* $2 order by code limit 5 ",array($g_user->get_profile(),$http->post("acs")));
$res=$cn->exec_sql("select distinct code,coalesce(description,code) as description from get_profile_menu($1) where code ~* $2 or description ~* $2 order by code limit 5 ",array($g_user->get_profile(),$http->post("acs")));
$nb=Database::num_row($res);
echo "<ul>";
set_language();

View file

@ -73,6 +73,8 @@ if ( ! $cn->exist_table('version')) {
echo '</p>';
return;
}
global $level;
$level=0;
/**
* if access_mode is MOBILE than force it to mobile.php
@ -93,6 +95,7 @@ if ( DEBUGNOALYSS > 1 ) {
\Noalyss\Dbg::display_size();
\Noalyss\Dbg::display_request();
\Noalyss\Dbg::display_global();
echo "encoding";echo mb_internal_encoding();
} //<--- if DEBUG
$g_parameter=new Noalyss_Parameter_Folder($cn);
@ -322,6 +325,7 @@ else
$_GET['ac']=$default;
$_POST['ac']=$default;
$_REQUEST['ac']=$default;
show_module($menu_id);
$all[0] = $default;
show_menu($menu_id);

View file

@ -33,6 +33,7 @@ global $g_user,$cn,$g_parameter;
require_once NOALYSS_INCLUDE.'/class/database.class.php';
require_once NOALYSS_INCLUDE . '/class/noalyss_user.class.php';
require_once NOALYSS_INCLUDE.'/lib/http_input.class.php';
mb_internal_encoding("UTF-8");
//
// for loading javascripts or style-sheet, it is needed to know the user
@ -49,12 +50,47 @@ if (isset ($_REQUEST['loadjs']) && $_REQUEST['loadjs']=='message')
include_once NOALYSS_INCLUDE."/lib/message_javascript.php";
return;
}
//------------------------------------------------
// Export File from ADMINISTRATION MENU
//------------------------------------------------
$hi=new HttpInput();
if ($hi->request("admin","string",0)==1 ) {
$g_user=new Noalyss_user(new Database());
if ($g_user->admin != 1)
{
$g_user->audit('FAIL', "ADMIN: export admin".var_export($_REQUEST,true));
echo_warning(_("Accès interdit"));
exit();
}
if ( $hi->get("action")=="logfile") {
$directory=dir( NOALYSS_BASE.DIRECTORY_SEPARATOR."log");
$a_file=[];
while ( $file = $directory->read()) {
if (preg_match("/noalyss.*log/", $file)) {
$a_file[]=$file;
}
}
$file=$hi->get("file");
if (! in_array($file,$a_file ) )
{
echo_warning(sprintf("%s non trouvé",$file));
return;
}
header('Content-Type: application/x-download');
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Cache-Control: private, max-age=0, must-revalidate');
header('Pragma: public');
echo file_get_contents(NOALYSS_BASE.DIRECTORY_SEPARATOR."/log/{$file}");
}
return;
}
//------------------------------------------------
// Connect the user to the current folder and export file
//------------------------------------------------
$cn=Dossier::connect();
$g_user=new Noalyss_user($cn);
$gDossier=dossier::id();
$g_parameter=new Noalyss_Parameter_Folder($cn);
mb_internal_encoding("UTF-8");
$g_user->Check();
/**
* check if 2FA is completed
@ -62,9 +98,10 @@ $g_user->Check();
if ( ! $g_user->is_double_identified()) {
exit();
}
$gDossier=dossier::id();
$g_parameter=new Noalyss_Parameter_Folder($cn);
$action=$g_user->check_dossier($gDossier);
$hi=new HttpInput();
$action=$hi->get("act");
if ( $action=='X' || $g_user->check_print($action)==0 )

View file

@ -1297,14 +1297,12 @@ function search_letter(obj) {
*/
function op_save(obj) {
try {
var queryString = id$(obj).serialize(true);
queryString ["gDossier"] = obj.gDossier.value;
var rapt2 = "rapt" + obj.whatdiv.value;
queryString ["rapt"] = id$(rapt2).value;
queryString ["jr_id"] = obj.jr_id.value;
var jr_id = obj.jr_id.value;
queryString ["div"] = obj.whatdiv.value;
var divid = obj.whatdiv.value;
var queryString = Form.serialize(obj,true);
var divid = queryString['whatdiv'];
queryString["div"] = queryString['whatdiv'];
queryString["rapt"] = id$("rapt"+divid).value;
var jr_id = queryString['jr_id'];
queryString ["act"] = "save";
queryString ["op"] = "ledger";
queryString ["jr_note"]=encodeURI(tinyMCE.get("jrn_note"+divid).getContent());
@ -1346,7 +1344,7 @@ function op_save(obj) {
}
new Ajax.Request('ajax_misc.php', {
parameters: {
'gDossier': obj.gDossier.value,
'gDossier': queryString ["gDossier"],
'act': 'de',
'op': 'ledger',
'jr_id': jr_id,
@ -1359,7 +1357,7 @@ function op_save(obj) {
id$(divid).innerHTML = unescape(getNodeText(html[0]));
id$(divid).innerHTML.evalScripts();
remove_waiting_box();
noalyss.refresh_note(jr_id,obj.gDossier.value);
noalyss.refresh_note(jr_id,queryString ["gDossier"]);
} catch (e) {
console.error("D1. op_save")
alert_box("1038" + e.message)
@ -1539,7 +1537,9 @@ function save_filter(p_div, p_dossier) {
// Get all elt from the form
for (var i = 0; i < elt.length; i++) {
var idx = elt[i];
eltValue[idx] = id$(p_div + elt[i]).value;
eltValue[idx] = null;
if ( document.getElementById(p_div+elt[i]) )
eltValue[idx]=id$(p_div + elt[i]).value;
}
if (eltValue['amount_min'] == "") eltValue["amount_min"] = 0;
@ -1602,7 +1602,9 @@ function load_filter(p_div, p_dossier, p_filter_id) {
, 'p_currency_code', 'tva_id_search'];
for (var i = 0; i < elt.length; i++) {
var idx = elt[i];
id$(p_div + idx).value = answer[elt[i]];
if ( document.getElementById(p_div + idx))
id$(p_div + idx).value = answer[elt[i]];
}
// fillup the r_jrn array
var eltLedgerId = id$("ledger_id" + p_div);

View file

@ -273,7 +273,7 @@ function search_account_card(p_obj)
onSuccess: function (req){
var pos=calcy(50);
var obj={id:"search_account_div",cssclass:"inner_box",style:"top:"+pos+"px",
var obj={id:"search_account_div",cssclass:"inner_box",style:"top:"+pos+"px;z-index:"+get_next_layer(),
html:req.responseText};
add_div(obj);
remove_waiting_box();

View file

@ -1215,7 +1215,7 @@ function modify_card(p_fiche_id)
nTop = 170;
}
var str_top = fixed_position(250, nTop)
var str_style = str_top + ";width:45em;height:auto;position:absolute";
var str_style = str_top + ";width:45em;height:auto;position:absolute"+"; z-index:"+get_next_layer();
var popup = {'id': content, 'cssclass': 'inner_box', 'style': str_style, 'html': loading(), 'drag': false};
@ -1383,7 +1383,7 @@ function linked_card_option(p_action_person_id,p_dossier) {
},
onSuccess:function(req) {
remove_waiting_box();
add_div({ "id":"d_linked_card_option",cssclass:"inner_box",style:"position:fixed;top:30%;min-width:20rem;width:auto;",drag:0});
add_div({ "id":"d_linked_card_option",cssclass:"inner_box",style:"position:fixed;top:30%;min-width:20rem;width:auto;z-index:"+get_next_layer(),drag:0});
id$("d_linked_card_option").update(req.responseText);
}

View file

@ -282,7 +282,7 @@ function action_show(p_dossier)
parameters : {gDossier:p_dossier,'op':'action_show'},
onSuccess : function(p_xml, p_text) {
remove_waiting_box();
add_div({id: 'action_list_div', style:"position:fixed;top:1%;width:90%;left:5%" , cssclass: 'inner_box'});
add_div({id: 'action_list_div', style:"position:fixed;top:1%;width:90%;left:5%;z-index:"+get_next_layer() , cssclass: 'inner_box'});
$('action_list_div').innerHTML=p_xml.responseText;
var table_followup=document.getElementById('event_followup');
if ( table_followup) { sorttable.makeSortable(table_followup); }
@ -312,7 +312,7 @@ function action_add(p_dossier) {
onSuccess : function(p_xml, p_text) {
if (p_xml.responseText === 'NOCONX') { reconnect();return;}
remove_waiting_box();
add_div({id: 'action_add_div',style:'top:25px',
add_div({id: 'action_add_div',style:'top:25px;z-index:'+get_next_layer(),
cssclass: 'inner_box'});
$('action_add_div').innerHTML=p_xml.responseText;
p_xml.responseText.evalScripts();

View file

@ -25,7 +25,7 @@ function modifyModeleDocument(p_value,dossier)
id='det'+layer;
var pos_y=posY+offsetY-20;
var pos_x=posX+offsetX+40;
var style="position:absolute;top:"+pos_y+"px;left:10%;width:80%";
var style="position:absolute;top:"+pos_y+"px;left:10%;width:80%;z-index:"+get_next_layer();
var popup={'id':'mod_doc',
'cssclass':'inner_box',
'html': loading(),

View file

@ -579,7 +579,7 @@ function cat_doc_change(p_dt_id, p_dossier) {
var queryString = "gDossier=" + p_dossier + "&op=mod_cat_doc" + "&dt_id=" + p_dt_id;
var nTop = calcy(posY);
var nLeft = "200px";
var str_style = "top:" + nTop + "px;left:" + nLeft + ";width:50em;height:auto";
var str_style = "top:" + nTop + "px;left:" + nLeft + ";width:50em;height:auto"+"; z-index:"+get_next_layer();
removeDiv('change_doc_div');
waiting_box();
@ -1170,7 +1170,7 @@ function display_periode(p_dossier, p_id) {
'id': 'mod_periode',
'cssclass': 'inner_box',
'html': loading(),
'style': 'width:30em',
'style': 'width:30em'+"; z-index:"+get_next_layer(),
'drag': true
};
if (!document.getElementById('mod_periode')) {
@ -1295,7 +1295,7 @@ function fill_box(req) {
function mod_predf_op(dossier_id, od_id, p_ledger) {
var target = "mod_predf_op";
removeDiv(target);
var str_style = "top:10%;left:2%;width:96%";
var str_style = "top:10%;left:2%;width:96%;"+"; z-index:"+get_next_layer();
var div = {id: target, cssclass: 'inner_box', style: str_style, html: loading(), drag: 1};
@ -1582,7 +1582,7 @@ function mod_menu(gdossier, pm_id) {
waiting_box();
removeDiv('divdm' + pm_id);
var qs = "op=det_menu&gDossier=" + gdossier + "&pm_id=" + pm_id + "&ctl=divdm" + pm_id;
var pos = fixed_position(50, 250);
var pos = fixed_position(50, 250)+"; z-index:"+get_next_layer();
var action = new Ajax.Request('ajax_misc.php',
{
method: 'get',
@ -1690,7 +1690,7 @@ function add_menu(obj) {
waiting_box();
removeDiv('divdm' + p_id);
var pos = fixed_position(250, 150) + ";width:50%;";
var pos = fixed_position(250, 150) + ";width:50%;"+"; z-index:"+get_next_layer();
var action = new Ajax.Request('ajax_misc.php',
{
method: 'get',
@ -1736,7 +1736,7 @@ function add_plugin(p_dossier) {
onSuccess: function (req) {
try {
remove_waiting_box();
var pos = fixed_position(250, 150) + ";width:30%";
var pos = fixed_position(250, 150) + ";width:30%"+"; z-index:"+get_next_layer();
add_div({id: "divplugin", drag: 1, cssclass: "inner_box", style: pos});
id$('divplugin').innerHTML = req.responseText;
} catch (e) {
@ -1766,7 +1766,7 @@ function mod_plugin(p_dossier, me_code) {
onSuccess: function (req) {
try {
remove_waiting_box();
var pos = fixed_position(250, 150) + ";width:30%";
var pos = fixed_position(250, 150) + ";width:30%"+"; z-index:"+get_next_layer();
add_div({id: "divplugin", drag: 1, cssclass: "inner_box", style: pos});
id$('divplugin').innerHTML = req.responseText;
@ -1791,7 +1791,7 @@ function create_menu(p_dossier) {
onSuccess: function (req) {
try {
remove_waiting_box();
var pos = fixed_position(250, 150) + ";width:30%";
var pos = fixed_position(250, 150) + ";width:30%"+"; z-index:"+get_next_layer();
add_div({
id: "divmenu",
drag: 1,
@ -1820,7 +1820,7 @@ function modify_menu(p_dossier, me_code) {
onSuccess: function (req) {
try {
remove_waiting_box();
var pos = fixed_position(250, 150) + ";width:30%";
var pos = fixed_position(250, 150) + ";width:30%"+"; z-index:"+get_next_layer();
add_div({
id: "divmenu",
drag: 1,
@ -2603,7 +2603,7 @@ function show_tag(p_dossier, p_ac, p_tag_id, p_post) {
code_html = unescape_xml(code_html);
remove_waiting_box();
var posy = calcy(250);
add_div({id: 'tag_div', cssclass: 'inner_box', drag: 0, style: "position:fixed;top:15%;"});
add_div({id: 'tag_div', cssclass: 'inner_box', drag: 0, style: "position:fixed;top:15%; z-index:"+get_next_layer()});
id$('tag_div').innerHTML = code_html;
try {
code_html.evalScripts();
@ -2670,7 +2670,7 @@ function action_tag_select(p_dossier, ag_id) {
}
var code_html = getNodeText(html[0]);
code_html = unescape_xml(code_html);
var pos = fixed_position(35, 229);
var pos = fixed_position(35, 229)+"; z-index:"+get_next_layer();
add_div({id: 'tag_div', style: pos, cssclass: 'inner_box tag', drag: 0});
remove_waiting_box();
@ -2806,7 +2806,7 @@ function search_display_tag(p_dossier, p_prefix, p_object) {
var code_html = getNodeText(html[0]);
code_html = unescape_xml(code_html);
remove_waiting_box();
add_div({id: p_prefix + 'tag_div', style: 'left:10%;width:70%', cssclass: 'inner_box', drag: 1});
add_div({id: p_prefix + 'tag_div', style: 'left:10%;width:70%;z-index:'+get_next_layer(), cssclass: 'inner_box', drag: 1});
id$(p_prefix + 'tag_div').style.top = calcy(200) + "px"
id$(p_prefix + 'tag_div').style.left = 20 + "%";
remove_waiting_box();
@ -2966,7 +2966,7 @@ function calendar_zoom(obj) {
obj.outdiv = 'calendar_zoom_div';
}
if (id$(obj.outdiv) == undefined) {
var str_style = 'top:10%;min-height:60rem';
var str_style = 'top:10%;min-height:60rem'+"; z-index:"+get_next_layer();
// var str_style = fixed_position(0, 120);
add_div({
id: obj.outdiv,
@ -3464,7 +3464,7 @@ var Periode = function (p_ledger) {
var y = 100;
add_div({
"id": "mod_periode",
"style": "position:fixed;top:" + y + "px;width:50%",
"style": "position:fixed;top:" + y + "px;width:50%"+"; z-index:"+get_next_layer(),
"cssclass": "inner_box",
'html': "wait"
});
@ -4026,7 +4026,7 @@ var operation_tag = function (p_div) {
}
var code_html = getNodeText(html[0]);
code_html = unescape_xml(code_html);
var pos = fixed_position(35, 229);
var pos = fixed_position(35, 229)+"; z-index:"+get_next_layer();
add_div({id: 'tag_div', style: pos, cssclass: 'inner_box tag', drag: 0});
remove_waiting_box();