Merge branch '16.0' of git@github.com:Dolibarr/dolibarr.git into develop

This commit is contained in:
Laurent Destailleur 2022-07-27 02:48:56 +02:00
commit a04bef1909
11 changed files with 124 additions and 33 deletions

View File

@ -227,6 +227,7 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/ticket
%_datadir/dolibarr/htdocs/user
%_datadir/dolibarr/htdocs/variants
%_datadir/dolibarr/htdocs/webhook
%_datadir/dolibarr/htdocs/webservices
%_datadir/dolibarr/htdocs/website
%_datadir/dolibarr/htdocs/workstation

View File

@ -54,7 +54,7 @@ BuildRequires: desktop-file-utils
Group: Applications/Productivity
Requires: apache-base, apache-mod_php, php-cgi, php-cli, php-bz2, php-gd, php-ldap, php-imap, php-mysqli, php-openssl, fonts-ttf-dejavu
Requires: mysql, mysql-client
%else%_datadir/dolibarr/htdocs/datapolicy
%else
%if 0%{?suse_version}
# Voir http://en.opensuse.org/openSUSE:Packaging_Conventions_RPM_Macros
Group: Productivity/Office/Management
@ -125,7 +125,7 @@ cui hai bisogno ed essere facile da usare.
%if 0%{?sles_version}
%{__rm} -rf $RPM_BUILD_ROOT
%{__mkdir} $RPM_BUILD_ROOT%_datadir/dolibarr/htdocs/datapolicy
%{__mkdir} $RPM_BUILD_ROOT%
%{__mkdir} $RPM_BUILD_ROOT%{_sysconfdir}
%{__mkdir} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
%else
@ -308,6 +308,7 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/ticket
%_datadir/dolibarr/htdocs/user
%_datadir/dolibarr/htdocs/variants
%_datadir/dolibarr/htdocs/webhook
%_datadir/dolibarr/htdocs/webservices
%_datadir/dolibarr/htdocs/website
%_datadir/dolibarr/htdocs/workstation

View File

@ -224,6 +224,7 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/ticket
%_datadir/dolibarr/htdocs/user
%_datadir/dolibarr/htdocs/variants
%_datadir/dolibarr/htdocs/webhook
%_datadir/dolibarr/htdocs/webservices
%_datadir/dolibarr/htdocs/website
%_datadir/dolibarr/htdocs/workstation

View File

@ -66,7 +66,7 @@ ed essere facile da usare.
Programmo web, progettato per poter fornire solo ciò di
cui hai bisogno ed essere facile da usare.
%_datadir/dolibarr/htdocs/webhook
#---- prep
%prep
@ -235,6 +235,7 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/ticket
%_datadir/dolibarr/htdocs/user
%_datadir/dolibarr/htdocs/variants
%_datadir/dolibarr/htdocs/webhook
%_datadir/dolibarr/htdocs/webservices
%_datadir/dolibarr/htdocs/website
%_datadir/dolibarr/htdocs/workstation

View File

@ -121,10 +121,19 @@ print '
display: none;
}
ul li.lilevel2 {
padding-left: 42px;
}
a.alilevel0, span.spanlilevel0 {
background-image: url(\''.DOL_URL_ROOT.'/theme/'.urlencode($conf->theme).'/img/next.png\') !important;
background-repeat: no-repeat !important;
background-position-x: 10px;
background-repeat: no-repeat !important;';
if ($langs->trans("DIRECTION") == 'rtl') {
print 'background-position: right;';
} else {
print 'background-position-x: 10px;';
}
print '
background-position-y: 16px;
padding: 1em 15px 1em 40px;
display: block;
@ -152,6 +161,18 @@ print '
li.lilevel1 a {
padding-bottom: 5px;
}
li.lilevel1 > a, li.lilevel1 > i {
/* background-image: url(\''.DOL_URL_ROOT.'/theme/'.urlencode($conf->theme).'/img/puce.png\') !important; */
background-repeat: no-repeat !important;';
if ($langs->trans("DIRECTION") == 'rtl') {
print 'background-position: right;';
} else {
print 'background-position-x: 10px;';
}
print 'background-position-y: 1px;';
print 'padding-left: 20px;';
print '
}
li.lilevel1 a, li.lilevel1 {
color: #000;
cursor: pointer;

View File

@ -1,5 +1,5 @@
<?php
/* Copyright (C) 2010-2013 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2010-2022 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@inodbox.com>
*
* This program is free software; you can redistribute it and/or modify
@ -72,6 +72,7 @@ function print_auguria_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout
$num = count($newTabMenu);
for ($i = 0; $i < $num; $i++) {
//var_dump($type_user.' '.$newTabMenu[$i]['url'].' '.$showmode.' '.$newTabMenu[$i]['perms']);
$idsel = (empty($newTabMenu[$i]['mainmenu']) ? 'none' : $newTabMenu[$i]['mainmenu']);
$shorturl = '';
@ -80,9 +81,9 @@ function print_auguria_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout
if ($showmode == 1) {
$newTabMenu[$i]['url'] = make_substitutions($newTabMenu[$i]['url'], $substitarray);
// url = url from host, shorturl = relative path into dolibarr sources
$url = $shorturl = $newTabMenu[$i]['url'];
if (!preg_match("/^(http:\/\/|https:\/\/)/i", $newTabMenu[$i]['url'])) {
if (!preg_match("/^(http:\/\/|https:\/\/)/i", $newTabMenu[$i]['url'])) { // Do not change url content for external links
$tmp = explode('?', $newTabMenu[$i]['url'], 2);
$url = $shorturl = $tmp[0];
$param = (isset($tmp[1]) ? $tmp[1] : '');
@ -235,11 +236,11 @@ function print_text_menu_entry_auguria($text, $showmode, $url, $id, $idsel, $cla
$classnametxt = str_replace('class="', 'class="tmenulabel ', $classname);
if ($showmode == 1) {
print '<a '.$classnametxt.' tabindex="-1" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').' title="'.dol_escape_htmltag($text).'">';
print '<div class="'.$id.' '.$idsel.' topmenuimage"><span class="'.$id.' tmenuimageforpng" id="mainmenuspan_'.$idsel.'"></span></div>';
print '<a '.$classnameimg.' tabindex="-1" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').' title="'.dol_escape_htmltag($text).'">';
print '<div class="'.$id.' '.$idsel.' topmenuimage aaa"><span class="'.$id.' tmenuimageforpng" id="mainmenuspan_'.$idsel.'"></span></div>';
print '</a>';
if (empty($conf->global->THEME_TOPMENU_DISABLE_TEXT)) {
print '<a '.$classnameimg.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').' title="'.dol_escape_htmltag($text).'">';
print '<a '.$classnametxt.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget ? ' target="'.$atarget.'"' : '').' title="'.dol_escape_htmltag($text).'">';
print '<span class="mainmenuaspan">';
print $text;
print '</span>';
@ -300,11 +301,13 @@ function print_end_menu_array_auguria()
* @param string $forcemainmenu 'x'=Force mainmenu to mainmenu='x'
* @param string $forceleftmenu 'all'=Force leftmenu to '' (= all). If value come being '', we change it to value in session and 'none' if not defined in session.
* @param array $moredata An array with more data to output
* @param int $type_user 0=Menu for backoffice, 1=Menu for front office
* @return int Nb of menu entries
*/
function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$tabMenu, &$menu, $noout = 0, $forcemainmenu = '', $forceleftmenu = '', $moredata = null)
function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$tabMenu, &$menu, $noout = 0, $forcemainmenu = '', $forceleftmenu = '', $moredata = null, $type_user = 0)
{
global $user, $conf, $langs, $dolibarr_main_db_name, $mysoc;
global $user, $conf, $langs, $hookmanager;
global $dolibarr_main_db_name, $mysoc;
$newmenu = $menu;
@ -472,6 +475,29 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t
return 0;
}
// Allow the $menu_array of the menu to be manipulated by modules
$parameters = array(
'mainmenu' => $mainmenu,
);
$hook_items = $menu_array;
$reshook = $hookmanager->executeHooks('menuLeftMenuItems', $parameters, $hook_items); // Note that $action and $object may have been modified by some hooks
if (is_numeric($reshook)) {
if ($reshook == 0 && !empty($hookmanager->results)) {
$menu_array[] = $hookmanager->results; // add
} elseif ($reshook == 1) {
$menu_array = $hookmanager->results; // replace
}
// @todo Sort menu items by 'position' value
// $position = array();
// foreach ($menu_array as $key => $row) {
// $position[$key] = $row['position'];
// }
// $array1_sort_order = SORT_ASC;
// array_multisort($position, $array1_sort_order, $menu_array);
}
// Show menu
$invert = empty($conf->global->MAIN_MENU_INVERT) ? "" : "invert";
if (empty($noout)) {
@ -542,7 +568,7 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t
if ($menu_array[$i]['enabled']) { // Enabled so visible
print '<div class="menu_titre">'.$tabstring;
if ($shorturlwithoutparam) {
print '<a class="vmenu" title="'.dol_escape_htmltag($menu_array[$i]['titre']).'" href="'.$url.'"'.($menu_array[$i]['target'] ? ' target="'.$menu_array[$i]['target'].'"' : '').'>';
print '<a class="vmenu" title="'.dol_escape_htmltag(dol_string_nohtmltag($menu_array[$i]['titre'])).'" href="'.$url.'"'.($menu_array[$i]['target'] ? ' target="'.$menu_array[$i]['target'].'"' : '').'>';
} else {
print '<span class="vmenu">';
}
@ -555,7 +581,11 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t
print '</div>'."\n";
$lastlevel0 = 'enabled';
} elseif ($showmenu) { // Not enabled but visible (so greyed)
print '<div class="menu_titre">'.$tabstring.'<span class="vmenudisabled">'.$menu_array[$i]['titre'].'</span></div>'."\n";
print '<div class="menu_titre">'.$tabstring;
print '<span class="vmenudisabled">';
print ($menu_array[$i]['prefix'] ? $menu_array[$i]['prefix'] : '').$menu_array[$i]['titre'];
print '</span>';
print '</div>'."\n";
$lastlevel0 = 'greyed';
} else {
$lastlevel0 = 'hidden';
@ -572,10 +602,12 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t
$cssmenu = ' menu_contenu'.dol_string_nospecial(preg_replace('/\.php.*$/', '', $menu_array[$i]['url']));
}
if ($menu_array[$i]['enabled'] && $lastlevel0 == 'enabled') { // Enabled so visible, except if parent was not enabled.
print '<div class="menu_contenu'.$cssmenu.'">'.$tabstring;
if ($menu_array[$i]['enabled'] && $lastlevel0 == 'enabled') {
// Enabled so visible, except if parent was not enabled.
print '<div class="menu_contenu'.$cssmenu.'">';
print $tabstring;
if ($shorturlwithoutparam) {
print '<a class="vsmenu" title="'.dol_escape_htmltag($menu_array[$i]['titre']).'" href="'.$url.'"'.($menu_array[$i]['target'] ? ' target="'.$menu_array[$i]['target'].'"' : '').'>';
print '<a class="vsmenu" title="'.dol_escape_htmltag(dol_string_nohtmltag($menu_array[$i]['titre'])).'" href="'.$url.'"'.($menu_array[$i]['target'] ? ' target="'.$menu_array[$i]['target'].'"' : '').'>';
} else {
print '<span class="vsmenu" title="'.dol_escape_htmltag($menu_array[$i]['titre']).'">';
}
@ -590,8 +622,12 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t
print '<br>';
}
print '</div>'."\n";
} elseif ($showmenu && $lastlevel0 == 'enabled') { // Not enabled but visible (so greyed), except if parent was not enabled.
print '<div class="menu_contenu'.$cssmenu.'">'.$tabstring.'<span class="vsmenudisabled vsmenudisabledmargin">'.$menu_array[$i]['titre'].'</span><br></div>'."\n";
} elseif ($showmenu && $lastlevel0 == 'enabled') {
// Not enabled but visible (so greyed), except if parent was not enabled.
print '<div class="menu_contenu'.$cssmenu.'">';
print $tabstring;
print '<span class="spanlilevel0 vsmenudisabled vsmenudisabledmargin">'.$menu_array[$i]['titre'].'</span><br>';
print '</div>'."\n";
}
}

View File

@ -186,8 +186,10 @@ class MenuManager
print '<a class="alilevel0" href="#">';
// Add font-awesome
if ($val['level'] == 0 && $val['mainmenu'] == 'home') {
print '<span class="fa fa-home fa-fw paddingright" aria-hidden="true"></span>';
if ($val['level'] == 0 && !empty($val['prefix'])) {
print $val['prefix'];
} elseif ($val['level'] == 0 && $val['mainmenu'] == 'home') {
print '<span class="fa fa-home fa-fw paddingright pictofixedwidth" aria-hidden="true"></span>';
}
print $val['titre'];
@ -284,8 +286,7 @@ class MenuManager
//print ' data-ajax="false"';
print '>';
$lastlevel2[$val2['level']] = 'enabled';
} else // Not allowed but visible (greyed)
{
} else { // Not allowed but visible (greyed)
print '<a href="#" class="vsmenudisabled">';
$lastlevel2[$val2['level']] = 'greyed';
}
@ -296,6 +297,13 @@ class MenuManager
$lastlevel2[$val2['level']] = 'greyed';
}
}
if ($val2['level'] == 0 && !empty($val2['prefix'])) {
print $val2['prefix'];
} else {
print '<i class="fa fa-does-not-exists fa-fw paddingright pictofixedwidth"></i>';
}
print $val2['titre'];
if ($relurl2) {
if ($val2['enabled']) { // Allowed
@ -311,7 +319,15 @@ class MenuManager
print '</ul>';
}
if ($val['enabled'] == 2) {
print '<span class="vsmenudisabled">'.$val['titre'].'</span>';
print '<span class="spanlilevel0 vsmenudisabled">';
// Add font-awesome
if ($val['level'] == 0 && !empty($val['prefix'])) {
print $val['prefix'];
}
print $val['titre'];
print '</span>';
}
print '</li>';
print '</ul>'."\n";

View File

@ -1,12 +1,12 @@
<?php
/* Copyright (C) 2010-2014 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2010-2022 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2012-2015 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
* Copyright (C) 2018-2022 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
* Copyright (C) 2018-2022 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
*
* 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
@ -59,6 +59,7 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout =
print_start_menu_array();
}
global $usemenuhider;
$usemenuhider = 1;
// Show/Hide vertical menu. The hamburger icon for .menuhider action.
@ -485,8 +486,8 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout =
$url = $shorturl = $tmp[0];
$param = (isset($tmp[1]) ? $tmp[1] : '');
if (!preg_match('/mainmenu/i', $param) || !preg_match('/leftmenu/i', $param)) {
$param .= ($param ? '&' : '').'mainmenu='.$newTabMenu[$i]['mainmenu'].'&amp;leftmenu=';
if ((!preg_match('/mainmenu/i', $param)) || !preg_match('/leftmenu/i', $param)) {
$param .= ($param ? '&' : '').'mainmenu='.$newTabMenu[$i]['mainmenu'].'&leftmenu=';
}
//$url.="idmenu=".$newTabMenu[$i]['rowid']; // Already done by menuLoad
$url = dol_buildpath($url, 1).($param ? '?'.$param : '');
@ -709,6 +710,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
$mainmenu = ($forcemainmenu ? $forcemainmenu : $_SESSION["mainmenu"]);
$leftmenu = ($forceleftmenu ? '' : (empty($_SESSION["leftmenu"]) ? 'none' : $_SESSION["leftmenu"]));
global $usemenuhider;
$usemenuhider = 0;
if (is_array($moredata) && !empty($moredata['searchform'])) { // searchform can contains select2 code or link to show old search form or link to switch on search page
@ -842,7 +844,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
}
}
//var_dump($tabMenu); //
//var_dump($tabMenu);
//var_dump($newmenu->liste);
// Build final $menu_array = $menu_array_before +$newmenu->liste + $menu_array_after

View File

@ -217,6 +217,11 @@ class MenuManager
// We add sub entry
print str_pad('', 1).'<li class="lilevel1 ui-btn-icon-right ui-btn">'; // ui-btn to highlight on clic
print '<a href="'.$relurl.'">';
if ($val['level'] == 0) {
print '<span class="fa fa-home fa-fw paddingright pictofixedwidth" aria-hidden="true"></span>';
}
if ($langs->trans(ucfirst($val['mainmenu'])."Dashboard") == ucfirst($val['mainmenu'])."Dashboard") { // No translation
if (in_array($val['mainmenu'], array('cashdesk', 'externalsite', 'website', 'collab', 'takepos'))) {
print $langs->trans("Access");
@ -306,6 +311,12 @@ class MenuManager
$lastlevel2[$val2['level']] = 'greyed';
}
}
// Add font-awesome
if ($val2['level'] == 0 && !empty($val2['prefix'])) {
print $val2['prefix'];
}
print $val2['titre'];
if ($relurl2) {
if ($val2['enabled']) { // Allowed
@ -322,6 +333,7 @@ class MenuManager
}
if ($val['enabled'] == 2) {
print '<span class="spanlilevel0 vsmenudisabled">';
// Add font-awesome
if ($val['level'] == 0 && !empty($val['prefix'])) {
print $val['prefix'];

View File

@ -293,7 +293,7 @@ ErrorThirpdartyOrMemberidIsMandatory=Third party or Member of partnership is man
# Warnings
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
WarningMandatorySetupNotComplete=Click here to setup mandatory parameters
WarningMandatorySetupNotComplete=Click here to setup main parameters
WarningEnableYourModulesApplications=Click here to enable your modules and applications
WarningSafeModeOnCheckExecDir=Warning, PHP option <b>safe_mode</b> is on so command must be stored inside a directory declared by php parameter <b>safe_mode_exec_dir</b>.
WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) already exists.

View File

@ -46,7 +46,7 @@ KnowledgeRecords = Articles
KnowledgeRecord = Article
KnowledgeRecordExtraFields = Extrafields for Article
GroupOfTicket=Group of tickets
YouCanLinkArticleToATicketCategory=You can link an article to a ticket group (so the article will be suggested during qualification of new tickets)
YouCanLinkArticleToATicketCategory=You can link the article to a ticket group (so the article will be highlighted on any tickets in this group)
SuggestedForTicketsInGroup=Suggested for tickets when group is
SetObsolete=Set as obsolete