Merge branch 'develop' of github.com:Dolibarr/dolibarr into develop#1

This commit is contained in:
lmarcouiller 2021-01-19 09:05:08 +01:00
commit fd888be5e5
13 changed files with 99 additions and 68 deletions

View File

@ -1,3 +1,7 @@
Barcode EAN 13
FR
==
Signification des chiffres.
- 2 chiffres pour le code pays ou code systeme
@ -9,6 +13,24 @@ Cette regle subit de nombreuses entorses pour ameliorer l'usage des chiffres dis
Voici la liste des codes pays ou systeme :
EN
==
Meaning of the numbers.
- 2 digits for the country code or system code
- 5 digits for the company identifier
- 5 digits for item identifier
- 1 digit for checksum
This rule has been twisted many times to improve the use of the available numbers.
Here is the list of country codes or system:
List
====
00 <20> 13 UCC (Etats-Unis et Canada)
20 <20> 29 Codification interne en magasin
30 <20> 37 GENCOD-EAN France
@ -104,4 +126,4 @@ Voici la liste des codes pays ou systeme :
978 - 979 Livres (ISBN)
980 Refus de remboursement
981 - 982 Coupons (monnaie courante)
99 Coupons
99 Coupons

View File

@ -1,5 +1,6 @@
* Page with license compatibility
https://www.gnu.org/licenses/quick-guide-gplv3.fr.html
[EN] https://www.gnu.org/licenses/quick-guide-gplv3.en.html
[FR] https://www.gnu.org/licenses/quick-guide-gplv3.fr.html
* FAQ on GPL license
https://www.fsf.org/licensing/licenses/gpl-faq.html

View File

@ -5,13 +5,13 @@ server {
root /path/to/your/htdocs;
# Optionnal
# Optional
error_log /path/to/your/log/directory/nginx.error.log;
access_log /path/to/your/log/directory/nginx.access.log;
index index.php index.html index.htm;
# Optionnal
# Optional
server_name your-fqdn.tld;
location / {
@ -23,6 +23,6 @@ server {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass unix:/var/run/php5-fpm.sock; // /var/run/php/php7.0-fpm.sock
}
}

View File

@ -2,7 +2,7 @@
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
* Copyright (C) 2015-2021 Frederic France <frederic.france@netlogic.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
@ -34,7 +34,7 @@ include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php';
class box_dolibarr_state_board extends ModeleBoxes
{
public $boxcode = "dolibarrstatebox";
public $boximg = "box_user";
public $boximg = "generic";
public $boxlabel = "BoxDolibarrStateBoard";
public $depends = array("user");
@ -62,7 +62,9 @@ class box_dolibarr_state_board extends ModeleBoxes
$this->db = $db;
// disable box for such cases
if (!empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) $this->enabled = 0; // disabled by this option
if (!empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) {
$this->enabled = 0; // disabled by this option
}
$this->hidden = !($user->rights->societe->lire && empty($user->socid));
}
@ -81,8 +83,7 @@ class box_dolibarr_state_board extends ModeleBoxes
$this->max = $max;
$this->info_box_head = array('text' => $langs->trans("DolibarrStateBoard"));
if (empty($user->socid) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS))
{
if (empty($user->socid) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) {
$hookmanager = new HookManager($this->db);
$hookmanager->initHooks(array('index'));
$boxstatItems = array();
@ -242,18 +243,15 @@ class box_dolibarr_state_board extends ModeleBoxes
);
$boardloaded = array();
foreach ($keys as $val)
{
if ($conditions[$val])
{
foreach ($keys as $val) {
if ($conditions[$val]) {
$boxstatItem = '';
$class = $classes[$val];
// Search in cache if load_state_board is already realized
$classkeyforcache = $class;
if ($classkeyforcache == 'ProductService') $classkeyforcache = 'Product'; // ProductService use same load_state_board than Product
if (!isset($boardloaded[$classkeyforcache]) || !is_object($boardloaded[$classkeyforcache]))
{
if (!isset($boardloaded[$classkeyforcache]) || !is_object($boardloaded[$classkeyforcache])) {
include_once $includes[$val]; // Loading a class cost around 1Mb
$board = new $class($this->db);
@ -277,12 +275,10 @@ class box_dolibarr_state_board extends ModeleBoxes
}
}
if (!empty($boxstatFromHook) || !empty($boxstatItems))
{
if (!empty($boxstatFromHook) || !empty($boxstatItems)) {
$boxstat .= $boxstatFromHook;
if (is_array($boxstatItems) && count($boxstatItems) > 0)
{
if (is_array($boxstatItems) && count($boxstatItems) > 0) {
$boxstat .= implode('', $boxstatItems);
}
@ -302,12 +298,6 @@ class box_dolibarr_state_board extends ModeleBoxes
'td' => '',
'textnoformat' => $boxstat
);
} else {
$this->info_box_contents[0][0] = array(
'td' => 'class="nohover center"',
'maxlength' => 500,
'text' => ($this->db->error() . ' sql=' . $sql)
);
}
} else {
$this->info_box_contents[0][0] = array(

View File

@ -6004,8 +6004,14 @@ abstract class CommonObject
} elseif (preg_match('/^(integer|link):(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[2].':'.$reg[3] => 'N');
$type = 'link';
} elseif (preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4] => 'N');
} elseif (preg_match('/^(sellist):(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[2].':'.$reg[3].':'.$reg[4].':'.$reg[5] => 'N');
$type = 'sellist';
} elseif (preg_match('/^(sellist):(.*):(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[2].':'.$reg[3].':'.$reg[4] => 'N');
$type = 'sellist';
} elseif (preg_match('/^(sellist):(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[2].':'.$reg[3] => 'N');
$type = 'sellist';
} elseif (preg_match('/varchar\((\d+)\)/', $val['type'], $reg)) {
$param['options'] = array();
@ -6172,24 +6178,20 @@ abstract class CommonObject
$keyList = (empty($InfoFieldList[2]) ? 'rowid' : $InfoFieldList[2].' as rowid');
if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4]))
{
if (strpos($InfoFieldList[4], 'extra.') !== false)
{
if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4])) {
if (strpos($InfoFieldList[4], 'extra.') !== false) {
$keyList = 'main.'.$InfoFieldList[2].' as rowid';
} else {
$keyList = $InfoFieldList[2].' as rowid';
}
}
if (count($InfoFieldList) > 3 && !empty($InfoFieldList[3]))
{
if (count($InfoFieldList) > 3 && !empty($InfoFieldList[3])) {
list($parentName, $parentField) = explode('|', $InfoFieldList[3]);
$keyList .= ', '.$parentField;
}
$fields_label = explode('|', $InfoFieldList[1]);
if (is_array($fields_label))
{
if (is_array($fields_label)) {
$keyList .= ', ';
$keyList .= implode(', ', $fields_label);
}
@ -6584,13 +6586,18 @@ abstract class CommonObject
$param['options'] = array();
if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) $param['options'] = $val['arrayofkeyval'];
if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg))
{
if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) {
$type = 'link';
$param['options'] = array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]);
} elseif (preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4] => 'N');
$type = 'sellist';
} elseif (preg_match('/^sellist:(.*):(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[1].':'.$reg[2].':'.$reg[3] => 'N');
$type = 'sellist';
} elseif (preg_match('/^sellist:(.*):(.*)/i', $val['type'], $reg)) {
$param['options'] = array($reg[1].':'.$reg[2] => 'N');
$type = 'sellist';
}
$langfile = $val['langfile'];
@ -6681,8 +6688,7 @@ abstract class CommonObject
$selectkey = "rowid";
$keyList = 'rowid';
if (count($InfoFieldList) >= 3)
{
if (count($InfoFieldList) > 4 && !empty($InfoFieldList[4])) {
$selectkey = $InfoFieldList[2];
$keyList = $InfoFieldList[2].' as rowid';
}

View File

@ -6798,8 +6798,8 @@ class Form
// Add code for jquery to use multiselect
if (!empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) {
$out .= "\n".'<!-- JS CODE TO ENABLE select for id '.$htmlname.' -->
<script>'."\n";
$out .= "\n".'<!-- JS CODE TO ENABLE select for id '.$htmlname.', addjscombo='.$addjscombo.' -->';
$out .= "\n".'<script>'."\n";
if ($addjscombo == 1) {
$tmpplugin = empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) ?constant('REQUIRE_JQUERY_MULTISELECT') : $conf->global->MAIN_USE_JQUERY_MULTISELECT;
$out .= 'function formatResult(record) {'."\n";
@ -6826,6 +6826,10 @@ class Form
formatSelection: formatSelection,
templateSelection: formatSelection /* For 4.0 */
});
/* Add also morecss to the css .select2 that is after the #htmlname, for component that are show dynamically after load, because select2 set
the size only if component is not hidden by default on load */
$(\'#'.$htmlname.' + .select2\').addClass(\''.$morecss.'\');
});'."\n";
} elseif ($addjscombo == 2 && !defined('DISABLE_MULTISELECT')) {
// Add other js lib

View File

@ -6,7 +6,7 @@
* Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr>
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.com>
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2019-2021 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2020 Pierre Ardoin <mapiolca@me.com>
*
* This program is free software; you can redistribute it and/or modify
@ -280,13 +280,10 @@ class ProductFournisseur extends Product
}
// Multicurrency
$multicurrency_buyprice = null;
$multicurrency_unitBuyPrice = null;
$fk_multicurrency = null;
if (!empty($conf->multicurrency->enabled)) {
if (empty($multicurrency_tx)) $multicurrency_tx = 1;
if (empty($multicurrency_buyprice)) $multicurrency_buyprice = 0;
if (empty($multicurrency_buyprice)) $multicurrency_buyprice = 0;
if ($multicurrency_price_base_type == 'TTC')
{
@ -1071,9 +1068,12 @@ class ProductFournisseur extends Product
{
global $db, $conf, $langs;
if (!empty($conf->dol_no_mouse_hover)) $notooltip = 1; // Force disable tooltips
if (!empty($conf->dol_no_mouse_hover)) {
$notooltip = 1; // Force disable tooltips
}
$result = '';
$label = '';
if (!empty($this->entity)) {
$tmpphoto = $this->show_photos('product', $conf->product->multidir_output[$this->entity], 1, 1, 0, 0, 0, 80);
@ -1112,8 +1112,7 @@ class ProductFournisseur extends Product
$label .= '<br><b>'.$langs->trans('BarCode').':</b> '.$this->barcode;
}
if ($this->type == Product::TYPE_PRODUCT)
{
if ($this->type == Product::TYPE_PRODUCT) {
if ($this->weight) {
$label .= "<br><b>".$langs->trans("Weight").'</b>: '.$this->weight.' '.measuringUnitString(0, "weight", $this->weight_units);
}
@ -1161,33 +1160,40 @@ class ProductFournisseur extends Product
$url = dol_buildpath('/product/fournisseurs.php', 1).'?id='.$this->id.'&action=add_price&socid='.$this->fourn_id.'&rowid='.$this->product_fourn_price_id;
if ($option != 'nolink')
{
if ($option != 'nolink') {
// Add param to save lastsearch_values or not
$add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) $add_save_lastsearch_values = 1;
if ($add_save_lastsearch_values) $url .= '&save_lastsearch_values=1';
if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) {
$add_save_lastsearch_values = 1;
}
if ($add_save_lastsearch_values) {
$url .= '&save_lastsearch_values=1';
}
}
$linkclose = '';
if (empty($notooltip))
{
if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
{
if (empty($notooltip)) {
if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
$label = $langs->trans("SupplierRef");
$linkclose .= ' alt="'.dol_escape_htmltag($label, 1).'"';
}
$linkclose .= ' title="'.dol_escape_htmltag($label, 1).'"';
$linkclose .= ' class="classfortooltip'.($morecss ? ' '.$morecss : '').'"';
} else $linkclose = ($morecss ? ' class="'.$morecss.'"' : '');
} else {
$linkclose = ($morecss ? ' class="'.$morecss.'"' : '');
}
$linkstart = '<a href="'.$url.'"';
$linkstart .= $linkclose.'>';
$linkend = '</a>';
$result .= $linkstart;
if ($withpicto) $result .= img_object(($notooltip ? '' : $label), ($this->picto ? $this->picto : 'generic'), ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
if ($withpicto != 2) $result .= $this->ref.($this->ref_supplier ? ' ('.$this->ref_supplier.')' : '');
if ($withpicto) {
$result .= img_object(($notooltip ? '' : $label), ($this->picto ? $this->picto : 'generic'), ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
}
if ($withpicto != 2) {
$result .= $this->ref.($this->ref_supplier ? ' ('.$this->ref_supplier.')' : '');
}
$result .= $linkend;
//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');

View File

@ -1,4 +1,5 @@
# Dolibarr language file - Source file is en_US - boxes
BoxDolibarrStateBoard=Statistics on main business objects in database
BoxLoginInformation=Login Information
BoxLastRssInfos=RSS Information
BoxLastProducts=Latest %s Products/Services

View File

@ -70,7 +70,7 @@ class MyObject extends CommonObject
/**
* 'type' if the field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'text:none', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password')
* 'type' field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'sellist:TableName:LabelFieldName[:KeyFieldName[:KeyFieldParent[:Filter]]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'text:none', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password')
* Note: Filter can be a string like "(t.ref:like:'SO-%') or (t.date_creation:<:'20160101') or (t.nature:is:NULL)"
* 'label' the translation key.
* 'picto' is code of a picto to show before value in forms

View File

@ -1,6 +1,7 @@
User-agent: *
Allow: /public/agenda/agendaexport.php
Allow: /public/demo/
Allow: /public/members/new.php
Allow: /index.php
#Allow: /$
Disallow: /

View File

@ -1304,11 +1304,11 @@ table[summary="list_of_modules"] .fa-cog {
.minwidth500imp { min-width: 250px !important; }
}
select.widthcentpercentminusx, input.widthcentpercentminusx {
select.widthcentpercentminusx, span.widthcentpercentminusx, input.widthcentpercentminusx {
width: calc(100% - 52px) !important;
display: inline-block;
}
select.widthcentpercentminusxx, input.widthcentpercentminusxx {
select.widthcentpercentminusxx, span.widthcentpercentminusxx, input.widthcentpercentminusxx {
width: calc(100% - 70px) !important;
display: inline-block;
}

View File

@ -1295,7 +1295,7 @@ table[summary="list_of_modules"] .fa-cog {
.minwidth500imp { min-width: 250px !important; }
}
/* Set a width. Note: add also a max-width that will be used in priority */
/* Set a width. Note: add also a max-width, for example maxwidth500, that will be used in priority */
.widthcentpercentminusx {
width: calc(100% - 50px) !important;
display: inline-block;
@ -1335,7 +1335,7 @@ table[summary="list_of_modules"] .fa-cog {
padding-left: 0;
}
.login_table input#username, .login_table input#password, .login_table input#securitycode {
margin-left: 5px !important;
margin-left: 5px !important;
}
div#login_left, div#login_right {
min-width: 150px !important;
@ -2383,7 +2383,7 @@ form#login {
border-radius: 2px;
}
.login_table .tdinputlogin {
border-bottom: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
.login_table .tdinputlogin .fa {
padding-left: 10px;

View File

@ -3628,11 +3628,11 @@ if ($action == 'editmeta' || $action == 'createcontainer') // Edit properties of
print '<tr><td class="toptd">'.$form->editfieldkey('Categories', 'categories', '', $objectpage, 0).'</td><td>';
print img_picto('', 'category', 'class="paddingright"');
print $form->multiselectarray('categories', $cate_arbo, (GETPOSTISSET('categories') ? GETPOST('categories', 'array') : $arrayselected), null, null, 'quatrevingtpercent widthcentpercentminusx');
print $form->multiselectarray('categories', $cate_arbo, (GETPOSTISSET('categories') ? GETPOST('categories', 'array') : $arrayselected), null, null, 'minwidth200 widthcentpercentminusxx');
print "</td></tr>";
}
if (!empty($conf->global->WEBSITE_PAGE_SHOW_INTERNAL_LINKS_TO_OBJECT)) {
if (!empty($conf->global->WEBSITE_PAGE_SHOW_INTERNAL_LINKS_TO_OBJECT)) { // TODO Replace this with link into element_element ?
print '<tr><td class="titlefieldcreate">';
print 'ObjectClass';
print '</td><td>';