From 4cf7f68b6cbc3d3b7d2d9c9d0655468690f9214b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 14 May 2020 18:44:05 +0200 Subject: [PATCH 01/13] Fix search on pages --- htdocs/website/class/websitepage.class.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index c63823f51a1..3e518d4d633 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -329,14 +329,23 @@ class WebsitePage extends CommonObject $sqlwhere = array(); if (count($filter) > 0) { foreach ($filter as $key => $value) { - if ($key == 't.rowid' || $key == 't.fk_website') { + if ($key == 't.rowid' || $key == 't.fk_website' || $key == 'status') { $sqlwhere[] = $key.'='.$value; + } elseif ($key == 'type_container') { + $sqlwhere[] = $key."='".$value."'"; } elseif ($key == 'lang' || $key == 't.lang') { $listoflang = array(); + $foundnull = 0; foreach(explode(',', $value) as $tmpvalue) { + if ($tmpvalue == 'null') { + $foundnull++; + continue; + } $listoflang[] = "'".$this->db->escape(substr(str_replace("'", '', $tmpvalue), 0, 2))."'"; } - $sqlwhere[] = $key." IN (".join(',', $listoflang).")"; + $stringtouse = $key." IN (".join(',', $listoflang).")"; + if ($foundnull) $stringtouse = '('.$stringtouse.' OR '.$key.' IS NULL)'; + $sqlwhere[] = $stringtouse; } else { $sqlwhere[] = $key.' LIKE \'%'.$this->db->escape($value).'%\''; } From 0842259012f041d7f0ed33dbcf9be5d0fc97ddd3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 14 May 2020 18:55:20 +0200 Subject: [PATCH 02/13] Fix lang must be set to null and not 0 when not defined --- htdocs/website/class/websitepage.class.php | 25 +++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 3e518d4d633..2a72a222265 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -108,6 +108,29 @@ class WebsitePage extends CommonObject const STATUS_VALIDATED = 1; + /** + * 'type' if the field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', '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. + * 'enabled' is a condition when the field must be managed (Example: 1 or '$conf->global->MY_SETUP_PARAM) + * 'position' is the sort order of field. + * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0). + * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). 5=Visible on list and view only (not create/not update). Using a negative value means field is not shown by default on list but can be selected for viewing) + * 'noteditable' says if field is not editable (1 or 0) + * 'default' is a default value for creation (can still be overwrote by the Setup of Default Values if field is editable in creation form). Note: If default is set to '(PROV)' and field is 'ref', the default value will be set to '(PROVid)' where id is rowid when a new record is created. + * 'index' if we want an index in database. + * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...). + * 'searchall' is 1 if we want to search in this field when making a search from the quick search button. + * 'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8). + * 'css' is the CSS style to use on field. For example: 'maxwidth200' + * 'help' is a string visible as a tooltip on field + * 'showoncombobox' if value of the field must be visible into the label of the combobox that list record + * 'disabled' is 1 if we want to have the field locked by a 'disabled' attribute. In most cases, this is never set into the definition of $fields into class, but is set dynamically by some part of code. + * 'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel") + * 'comment' is not used. You can store here any text of your choice. It is not used by application. + * + * Note: To have value dynamic, you can set value to 0 in definition and edit the value on the fly into the constructor. + */ // BEGIN MODULEBUILDER PROPERTIES /** @@ -122,7 +145,7 @@ class WebsitePage extends CommonObject 'description' =>array('type'=>'varchar(255)', 'label'=>'Description', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1), 'image' =>array('type'=>'varchar(255)', 'label'=>'Image', 'enabled'=>1, 'visible'=>1, 'position'=>32, 'searchall'=>0, 'help'=>'Relative path of media. Used if Type is "blogpost"'), 'keywords' =>array('type'=>'varchar(255)', 'label'=>'Keywords', 'enabled'=>1, 'visible'=>1, 'position'=>45, 'searchall'=>0), - 'lang' =>array('type'=>'varchar(6)', 'label'=>'Lang', 'enabled'=>1, 'visible'=>1, 'position'=>45, 'searchall'=>0), + 'lang' =>array('type'=>'varchar(6)', 'label'=>'Lang', 'enabled'=>1, 'notnull'=>-1, 'visible'=>1, 'position'=>45, 'searchall'=>0), //'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'index'=>true, 'position'=>1000), 'fk_website' =>array('type'=>'integer', 'label'=>'WebsiteId', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'position'=>40, 'searchall'=>0, 'foreignkey'=>'websitepage.rowid'), 'fk_page' =>array('type'=>'integer', 'label'=>'ParentPageId', 'enabled'=>1, 'visible'=>1, 'notnull'=>-1, 'position'=>45, 'searchall'=>0, 'foreignkey'=>'website.rowid'), From 3811586cd0654ef0d99c6369177d7b96cf35b50d Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 14 May 2020 20:34:48 +0200 Subject: [PATCH 03/13] FIX Site ec.europa.eu has moved to https:// --- htdocs/societe/checkvat/checkVatPopup.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/checkvat/checkVatPopup.php b/htdocs/societe/checkvat/checkVatPopup.php index 689df14f3d7..e1f940cfab8 100644 --- a/htdocs/societe/checkvat/checkVatPopup.php +++ b/htdocs/societe/checkvat/checkVatPopup.php @@ -28,9 +28,9 @@ require_once NUSOAP_PATH.'/nusoap.php'; $langs->load("companies"); //http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl -$WS_DOL_URL='http://ec.europa.eu/taxation_customs/vies/services/checkVatService'; +$WS_DOL_URL='https://ec.europa.eu/taxation_customs/vies/services/checkVatService'; //$WS_DOL_URL_WSDL=$WS_DOL_URL.'?wsdl'; -$WS_DOL_URL_WSDL='http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'; +$WS_DOL_URL_WSDL='https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'; $WS_METHOD ='checkVat'; From cb98ec4d232b0be9d776e5b50a0745f307f5b016 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 15 May 2020 01:18:53 +0200 Subject: [PATCH 04/13] Fix datapolicycron --- htdocs/datapolicy/class/datapolicycron.class.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/datapolicy/class/datapolicycron.class.php b/htdocs/datapolicy/class/datapolicycron.class.php index 0d241f75334..81e9d009a56 100644 --- a/htdocs/datapolicy/class/datapolicycron.class.php +++ b/htdocs/datapolicy/class/datapolicycron.class.php @@ -461,7 +461,7 @@ class DataPolicyCron ) ), ); - + $this->db->begin(); foreach ($arrayofparameters as $key => $params) @@ -470,15 +470,15 @@ class DataPolicyCron { $sql = sprintf($params['sql'], (int) $conf->entity, (int) $conf->global->$key, (int) $conf->global->$key); - $resql = $db->query($sql); + $resql = $this->db->query($sql); - if ($resql && $db->num_rows($resql) > 0) + if ($resql && $this->db->num_rows($resql) > 0) { - $num = $db->num_rows($resql); + $num = $this->db->num_rows($resql); $i = 0; require_once $params['file']; - $object = new $params['class']($db); + $object = new $params['class']($this->db); while ($i < $num && ! $error) { From e691045c3d6ef5ad11fd9539fc702ed706229165 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Thu, 14 May 2020 23:20:39 +0000 Subject: [PATCH 05/13] Fixing style errors. --- htdocs/datapolicy/class/datapolicycron.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/datapolicy/class/datapolicycron.class.php b/htdocs/datapolicy/class/datapolicycron.class.php index 81e9d009a56..ac364c78f30 100644 --- a/htdocs/datapolicy/class/datapolicycron.class.php +++ b/htdocs/datapolicy/class/datapolicycron.class.php @@ -461,7 +461,7 @@ class DataPolicyCron ) ), ); - + $this->db->begin(); foreach ($arrayofparameters as $key => $params) From bfca151d8553e7e8fe4487d7cf5d73c8459e520f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 15 May 2020 11:58:50 +0200 Subject: [PATCH 06/13] Responsive --- htdocs/public/demo/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php index c470055dbce..cbed76af71f 100644 --- a/htdocs/public/demo/index.php +++ b/htdocs/public/demo/index.php @@ -280,7 +280,7 @@ print ''; print '
'; print '
'; -print '
'.$langs->trans("DemoDesc").'

'; +print '
'.$langs->trans("DemoDesc").'

'; print '
'.$langs->trans("ChooseYourDemoProfil").'
'; print '
'; print '
'; From ad906fc508d3a712ddcd2133299bf0827d16a0b2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 15 May 2020 12:43:48 +0200 Subject: [PATCH 07/13] Fix use SVG logo instead of PNG --- htdocs/cache.manifest | 2 +- htdocs/core/lib/ticket.lib.php | 6 +++--- htdocs/opensurvey/fonctions.php | 2 +- htdocs/public/demo/index.php | 2 +- htdocs/public/members/new.php | 6 +++--- htdocs/public/onlinesign/newonlinesign.php | 2 +- htdocs/public/payment/newpayment.php | 2 +- htdocs/public/payment/paymentko.php | 2 +- htdocs/public/payment/paymentok.php | 2 +- htdocs/theme/dolibarr_logo.png | Bin 9663 -> 14082 bytes htdocs/user/passwordforgotten.php | 8 ++++---- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/htdocs/cache.manifest b/htdocs/cache.manifest index ebbf1aab4eb..5e514a32a47 100644 --- a/htdocs/cache.manifest +++ b/htdocs/cache.manifest @@ -8,7 +8,7 @@ CACHE MANIFEST # Files listed under CACHE will be ALWAYS cached after they are loaded. # And they will be always used from Cache after (even after refresh). CACHE: -theme/dolibarr_logo.png +theme/dolibarr_logo.svg support/ support/index.php diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 0a50eb7407f..1b2a5c1245f 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -230,8 +230,8 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ } elseif (!empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo)) { $urllogo = DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.'&file='.urlencode('logos/'.$mysoc->logo); $width = 150; - } elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.png')) { - $urllogo = DOL_URL_ROOT.'/theme/dolibarr_logo.png'; + } elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.svg')) { + $urllogo = DOL_URL_ROOT.'/theme/dolibarr_logo.svg'; } } } @@ -254,7 +254,7 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ } print ''; if (empty($conf->global->MAIN_HIDE_POWERED_BY)) { - print ''; + print ''; } print ''; } diff --git a/htdocs/opensurvey/fonctions.php b/htdocs/opensurvey/fonctions.php index 30529b49f56..31ec69f3a42 100644 --- a/htdocs/opensurvey/fonctions.php +++ b/htdocs/opensurvey/fonctions.php @@ -121,7 +121,7 @@ function llxHeaderSurvey($title, $head = "", $disablejs = 0, $disablehead = 0, $ print '>'; print ''; if (empty($conf->global->MAIN_HIDE_POWERED_BY)) { - print ''; + print ''; } print ''; } diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php index cbed76af71f..f0caf948770 100644 --- a/htdocs/public/demo/index.php +++ b/htdocs/public/demo/index.php @@ -274,7 +274,7 @@ print "\n"; print '
'; print '
'; -print ''; +print ''; print '
'; print '
'; diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php index 5b456893bf9..7f788a84671 100644 --- a/htdocs/public/members/new.php +++ b/htdocs/public/members/new.php @@ -113,9 +113,9 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $ $urllogo = DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/'.$mysoc->logo); $width = 150; } - elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.png')) + elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.svg')) { - $urllogo = DOL_URL_ROOT.'/theme/dolibarr_logo.png'; + $urllogo = DOL_URL_ROOT.'/theme/dolibarr_logo.svg'; $width = 150; } @@ -130,7 +130,7 @@ function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $ print '>'; print ''; if (empty($conf->global->MAIN_HIDE_POWERED_BY)) { - print ''; + print ''; } print ''; } diff --git a/htdocs/public/onlinesign/newonlinesign.php b/htdocs/public/onlinesign/newonlinesign.php index 83e757b78f8..2378728a8d3 100644 --- a/htdocs/public/onlinesign/newonlinesign.php +++ b/htdocs/public/onlinesign/newonlinesign.php @@ -191,7 +191,7 @@ if ($urllogo) print '>'; print ''; if (empty($conf->global->MAIN_HIDE_POWERED_BY)) { - print ''; + print ''; } print ''; } diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index ddd1943329e..ea7fd71c9e6 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -793,7 +793,7 @@ if ($urllogo) print '>'; print ''; if (empty($conf->global->MAIN_HIDE_POWERED_BY)) { - print ''; + print ''; } print ''; } diff --git a/htdocs/public/payment/paymentko.php b/htdocs/public/payment/paymentko.php index 2610219d69d..a3f6d733fcb 100644 --- a/htdocs/public/payment/paymentko.php +++ b/htdocs/public/payment/paymentko.php @@ -245,7 +245,7 @@ if ($urllogo) print '>'; print ''; if (empty($conf->global->MAIN_HIDE_POWERED_BY)) { - print ''; + print ''; } print ''; } diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php index 6b7805cf473..b1d6c149a51 100644 --- a/htdocs/public/payment/paymentok.php +++ b/htdocs/public/payment/paymentok.php @@ -181,7 +181,7 @@ if ($urllogo) print '>'; print ''; if (empty($conf->global->MAIN_HIDE_POWERED_BY)) { - print ''; + print ''; } print ''; } diff --git a/htdocs/theme/dolibarr_logo.png b/htdocs/theme/dolibarr_logo.png index 77c2146191034eb2b02c61b2f67c26fcf5d6aa19..c15f03c821baf1e72192ebaee9c73477f5668810 100644 GIT binary patch literal 14082 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 literal 9663 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 BfOh}@ diff --git a/htdocs/user/passwordforgotten.php b/htdocs/user/passwordforgotten.php index b0f3a5aab6c..83289521538 100644 --- a/htdocs/user/passwordforgotten.php +++ b/htdocs/user/passwordforgotten.php @@ -192,13 +192,13 @@ elseif (!empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.' $urllogo = DOL_URL_ROOT.'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode('logos/'.$mysoc->logo); $width = 128; } -elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/img/dolibarr_logo.png')) +elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/img/dolibarr_logo.svg')) { - $urllogo = DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/dolibarr_logo.png'; + $urllogo = DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/dolibarr_logo.svg'; } -elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.png')) +elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.svg')) { - $urllogo = DOL_URL_ROOT.'/theme/dolibarr_logo.png'; + $urllogo = DOL_URL_ROOT.'/theme/dolibarr_logo.svg'; } // Security graphical code From 8a2741650a6096bdad3f165ce12aa98d54aa051b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 15 May 2020 12:46:55 +0200 Subject: [PATCH 08/13] Fix css --- htdocs/theme/eldy/global.inc.php | 3 +++ htdocs/theme/md/style.css.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index afb154408c5..a6e9258ea39 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1362,6 +1362,9 @@ td.showDragHandle { transition: left 0.5s ease; } +.demologo { + width: 200px; +} div.blockvmenulogo { border-bottom: 0 !important; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index da2df5eb788..38a9ec38fe5 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2471,6 +2471,9 @@ font.vsmenudisabledmargin { margin: 1px 1px 1px 8px; } a.help:link, a.help:visited, a.help:hover, a.help:active, span.help { text-align: ; font-weight: normal; color: #999; text-decoration: none; } +.demologo { + width: 200px; +} div.blockvmenulogo { border-bottom: 0 !important; From 949ef8d7d89f413cd8b3c72eb5c5f85a9c409e20 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 15 May 2020 12:49:22 +0200 Subject: [PATCH 09/13] Fix css --- htdocs/public/demo/demo.css | 5 ++++- htdocs/theme/eldy/global.inc.php | 3 --- htdocs/theme/md/style.css.php | 3 --- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/htdocs/public/demo/demo.css b/htdocs/public/demo/demo.css index 9328a8ecd1b..b185f8c933f 100644 --- a/htdocs/public/demo/demo.css +++ b/htdocs/public/demo/demo.css @@ -105,8 +105,11 @@ img.demothumb { object-fit: contain; height: 140px; background-position-y: bottom; + background-position-x: right; +} +.demologo { + width: 200px; } - @media only screen and (max-width: 767px) { diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index a6e9258ea39..afb154408c5 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1362,9 +1362,6 @@ td.showDragHandle { transition: left 0.5s ease; } -.demologo { - width: 200px; -} div.blockvmenulogo { border-bottom: 0 !important; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 38a9ec38fe5..da2df5eb788 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2471,9 +2471,6 @@ font.vsmenudisabledmargin { margin: 1px 1px 1px 8px; } a.help:link, a.help:visited, a.help:hover, a.help:active, span.help { text-align: ; font-weight: normal; color: #999; text-decoration: none; } -.demologo { - width: 200px; -} div.blockvmenulogo { border-bottom: 0 !important; From 91f87d6834ad67d11caf7edc7b932993a0999029 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 15 May 2020 13:52:35 +0200 Subject: [PATCH 10/13] Fix bad param of getNomUrl --- htdocs/compta/accounting-files.php | 12 +++---- htdocs/don/class/don.class.php | 22 +++++++++---- htdocs/loan/class/paymentloan.class.php | 42 ++++++++++++++++--------- 3 files changed, 50 insertions(+), 26 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index f9bc453d999..7d8b819b75c 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -672,27 +672,27 @@ if (!empty($date_start) && !empty($date_stop)) } elseif ($data['item'] == 'ExpenseReport') { $expensereport->id = $data['id']; $expensereport->ref = $data['ref']; - print $expensereport->getNomUrl(1, '', 0, 0, '', 0, 0, 0); + print $expensereport->getNomUrl(1, 0, 0, '', 0, 0); } elseif ($data['item'] == 'SalaryPayment') { $salary_payment->id = $data['id']; $salary_payment->ref = $data['ref']; - print $salary_payment->getNomUrl(1, '', 0, 0, '', 0, 0, 0); + print $salary_payment->getNomUrl(1, '', 0, '', 0); } elseif ($data['item'] == 'Donation') { $don->id = $data['id']; $don->ref = $data['ref']; - print $don->getNomUrl(1, '', 0, 0, '', 0, 0, 0); + print $don->getNomUrl(1, 0, '', 0); } elseif ($data['item'] == 'SocialContributions') { $charge_sociales->id = $data['id']; $charge_sociales->ref = $data['ref']; - print $charge_sociales->getNomUrl(1, '', 0, 0, '', 0, 0, 0); + print $charge_sociales->getNomUrl(1, 0, 0, 0, 0); } elseif ($data['item'] == 'VariousPayment') { $various_payment->id = $data['id']; $various_payment->ref = $data['ref']; - print $various_payment->getNomUrl(1, '', 0, 0, '', 0, 0, 0); + print $various_payment->getNomUrl(1, '', 0, 0); } elseif ($data['item'] == 'LoanPayment') { $payment_loan->id = $data['id']; $payment_loan->ref = $data['ref']; - print $payment_loan->getNomUrl(1, '', 0, 0, '', 0, 0, 0); + print $payment_loan->getNomUrl(1, 0, 0, '', 0); } else { print $data['ref']; } diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index 77dbd177cbd..59c293e6386 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -916,11 +916,13 @@ class Don extends CommonObject /** * Return clicable name (with picto eventually) * - * @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto - * @param int $notooltip 1=Disable tooltip - * @return string Chaine avec URL + * @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto + * @param int $notooltip 1=Disable tooltip + * @param string $moretitle Add more text to title tooltip + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @return string Chaine avec URL */ - public function getNomUrl($withpicto = 0, $notooltip = 0) + public function getNomUrl($withpicto = 0, $notooltip = 0, $moretitle = '', $save_lastsearch_value = -1) { global $conf, $langs; @@ -928,10 +930,18 @@ class Don extends CommonObject $result = ''; $label = ''.$langs->trans("Donation").''; - if (!empty($this->id)) + if (!empty($this->id)) { $label .= '
'.$langs->trans('Ref').': '.$this->id; + } + if ($moretitle) $label .= ' - '.$moretitle; - $linkstart = ''; + $url = DOL_URL_ROOT.'/don/card.php?id='.$this->id; + + $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'; + + $linkstart = ''; $linkend = ''; $result .= $linkstart; diff --git a/htdocs/loan/class/paymentloan.class.php b/htdocs/loan/class/paymentloan.class.php index 485d48dc443..ce152317710 100644 --- a/htdocs/loan/class/paymentloan.class.php +++ b/htdocs/loan/class/paymentloan.class.php @@ -507,25 +507,39 @@ class PaymentLoan extends CommonObject /** * Return clicable name (with eventually a picto) * - * @param int $withpicto 0=No picto, 1=Include picto into link, 2=No picto - * @param int $maxlen Max length label - * @return string Chaine with URL + * @param int $withpicto 0=No picto, 1=Include picto into link, 2=No picto + * @param int $maxlen Max length label + * @param int $notooltip 1=Disable tooltip + * @param string $moretitle Add more text to title tooltip + * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @return string String with URL */ - public function getNomUrl($withpicto = 0, $maxlen = 0) + public function getNomUrl($withpicto = 0, $maxlen = 0, $notooltip = 0, $moretitle = '', $save_lastsearch_value = -1) { - global $langs; + global $langs, $conf; + + if (!empty($conf->dol_no_mouse_hover)) $notooltip = 1; // Force disable tooltips $result = ''; - - if (!empty($this->id)) - { - $link = ''; - $linkend = ''; - - if ($withpicto) $result .= ($link.img_object($langs->trans("ShowPayment").': '.$this->ref, 'payment').$linkend.' '); - if ($withpicto && $withpicto != 2) $result .= ' '; - if ($withpicto != 2) $result .= $link.($maxlen ?dol_trunc($this->ref, $maxlen) : $this->ref).$linkend; + $label = ''.$langs->trans("Loan").''; + if (!empty($this->id)) { + $label .= '
'.$langs->trans('Ref').': '.$this->id; } + if ($moretitle) $label .= ' - '.$moretitle; + + $url = DOL_URL_ROOT.'/loan/payment/card.php?id='.$this->id; + + $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'; + + $linkstart = ''; + $linkend = ''; + + $result .= $linkstart; + if ($withpicto) $result .= img_object(($notooltip ? '' : $label), $this->picto, ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1); + if ($withpicto != 2) $result .= $this->ref; + $result .= $linkend; return $result; } From 02b40ae8f60cfd76c70453d631af0c21618655ab Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 15 May 2020 13:54:05 +0200 Subject: [PATCH 11/13] Fix scrutinizer --- htdocs/core/class/interfaces.class.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/class/interfaces.class.php b/htdocs/core/class/interfaces.class.php index 9302ed09afb..4199e51cb68 100644 --- a/htdocs/core/class/interfaces.class.php +++ b/htdocs/core/class/interfaces.class.php @@ -328,6 +328,8 @@ class Interfaces continue; } + $text = ''; + try { $objMod = new $modName($db); From 672ea60ffd471b2156bf45c28c60c3dc57223906 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 15 May 2020 13:58:34 +0200 Subject: [PATCH 12/13] FIX #13896 --- htdocs/modulebuilder/template/class/myobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index fad19564fdc..2070bedf568 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -440,7 +440,7 @@ class MyObject extends CommonObject if ($resql) { $num = $this->db->num_rows($resql); $i = 0; - while ($i < min($limit, $num)) + while ($i < ($limit ? min($limit, $num) : $num)) { $obj = $this->db->fetch_object($resql); From dc6ae70aa6ddc311b8967dd9bf8d445e70c815a1 Mon Sep 17 00:00:00 2001 From: Langlais115 Date: Fri, 15 May 2020 10:25:56 +0200 Subject: [PATCH 13/13] Fix #13805 Add proper type check to "seuil_stock_alerte" parameter. --- htdocs/product/class/product.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index bb2a1652d8f..7b6892552d1 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -1015,7 +1015,7 @@ class Product extends CommonObject $sql .= ", volume = ".($this->volume != '' ? "'".$this->db->escape($this->volume)."'" : 'null'); $sql .= ", volume_units = ".($this->volume_units != '' ? "'".$this->db->escape($this->volume_units)."'" : 'null'); $sql .= ", fk_default_warehouse = ".($this->fk_default_warehouse > 0 ? $this->db->escape($this->fk_default_warehouse) : 'null'); - $sql .= ", seuil_stock_alerte = ".((isset($this->seuil_stock_alerte) && $this->seuil_stock_alerte != '') ? "'".$this->db->escape($this->seuil_stock_alerte)."'" : "null"); + $sql .= ", seuil_stock_alerte = ".((isset($this->seuil_stock_alerte) && is_numeric($this->seuil_stock_alerte)) ? (int) $this->seuil_stock_alerte : 'null'); $sql .= ", description = '".$this->db->escape($this->description)."'"; $sql .= ", url = ".($this->url ? "'".$this->db->escape($this->url)."'" : 'null'); $sql .= ", customcode = '".$this->db->escape($this->customcode)."'";