From bb893fd3a8748fc055d89a32bac38c1de9ee94b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 27 Aug 2019 18:16:34 +0200 Subject: [PATCH 01/11] FIX Missing the filter fields in export of expense report and leaves --- htdocs/core/modules/modExpenseReport.class.php | 8 +++++++- htdocs/core/modules/modHoliday.class.php | 6 ++++++ htdocs/langs/en_US/holiday.lang | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/modExpenseReport.class.php b/htdocs/core/modules/modExpenseReport.class.php index 0d8fa008c6b..ea1ffb7f6a3 100644 --- a/htdocs/core/modules/modExpenseReport.class.php +++ b/htdocs/core/modules/modExpenseReport.class.php @@ -186,7 +186,13 @@ class modExpenseReport extends DolibarrModules 'u.lastname'=>'Lastname','u.firstname'=>'Firstname','u.login'=>"Login",'ed.rowid'=>'LineId','tf.code'=>'Type','ed.date'=>'Date','ed.tva_tx'=>'VATRate', 'ed.total_ht'=>'TotalHT','ed.total_tva'=>'TotalVAT','ed.total_ttc'=>'TotalTTC','ed.comments'=>'Comment','p.rowid'=>'ProjectId','p.ref'=>'Ref' ); - $this->export_entities_array[$r]=array( + $this->export_TypeFields_array[$r]=array( + 'd.rowid'=>"Numeric",'d.ref'=>'Text','d.date_debut'=>'Date','d.date_fin'=>'Date','d.date_create'=>'Date','d.date_approve'=>'Date', + 'd.total_ht'=>"Numeric",'d.total_tva'=>'Numeric','d.total_ttc'=>'Numeric','d.note_private'=>'Text','d.note_public'=>'Text', + 'u.lastname'=>'Text','u.firstname'=>'Text','u.login'=>"Text",'ed.rowid'=>'Numeric','tf.code'=>'Code','ed.date'=>'Date','ed.tva_tx'=>'Numeric', + 'ed.total_ht'=>'Numeric','ed.total_tva'=>'Numeric','ed.total_ttc'=>'Numeric','ed.comments'=>'Text','p.rowid'=>'Numeric','p.ref'=>'Text' + ); + $this->export_entities_array[$r]=array( 'u.lastname'=>'user','u.firstname'=>'user','u.login'=>'user','ed.rowid'=>'expensereport_line','ed.date'=>'expensereport_line', 'ed.tva_tx'=>'expensereport_line','ed.total_ht'=>'expensereport_line','ed.total_tva'=>'expensereport_line','ed.total_ttc'=>'expensereport_line', 'ed.comments'=>'expensereport_line','tf.code'=>'expensereport_line','p.project_ref'=>'expensereport_line','p.rowid'=>'project','p.ref'=>'project' diff --git a/htdocs/core/modules/modHoliday.class.php b/htdocs/core/modules/modHoliday.class.php index 8bb34a338e5..ba792ad28ad 100644 --- a/htdocs/core/modules/modHoliday.class.php +++ b/htdocs/core/modules/modHoliday.class.php @@ -206,6 +206,12 @@ class modHoliday extends DolibarrModules 'd.date_valid'=>'DateApprove','d.fk_validator'=>"UserForApprovalID",'ua.lastname'=>"UserForApprovalLastname",'ua.firstname'=>"UserForApprovalFirstname", 'ua.login'=>"UserForApprovalLogin",'d.description'=>'Description','d.statut'=>'Status' ); + $this->export_TypeFields_array[$r]=array( + 'd.rowid'=>"Numeric",'t.code'=>'Text', 't.label'=>'Text','d.fk_user'=>'Numeric', + 'u.lastname'=>'Text','u.firstname'=>'Text','u.login'=>"Text",'d.date_debut'=>'Date','d.date_fin'=>'Date', + 'd.date_valid'=>'Date','d.fk_validator'=>"Numeric",'ua.lastname'=>"Text",'ua.firstname'=>"Text", + 'ua.login'=>"Text",'d.description'=>'Text','d.statut'=>'Numeric' + ); $this->export_entities_array[$r]=array( 'u.lastname'=>'user','u.firstname'=>'user','u.login'=>'user','ua.lastname'=>'user','ua.firstname'=>'user','ua.login'=>'user' ); diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang index 1367e721ce8..145f996c4f2 100644 --- a/htdocs/langs/en_US/holiday.lang +++ b/htdocs/langs/en_US/holiday.lang @@ -18,6 +18,7 @@ ValidatorCP=Approbator ListeCP=List of leave LeaveId=Leave ID ReviewedByCP=Will be approved by +UserID=User ID UserForApprovalID=User for approval ID UserForApprovalFirstname=First name of approval user UserForApprovalLastname=Last name of approval user From 7236df37d4238a928f1bc00b3429b580db9b8533 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 28 Aug 2019 12:10:28 +0200 Subject: [PATCH 02/11] FIX error management when adding a property with type real --- htdocs/core/lib/modulebuilder.lib.php | 7 +++---- htdocs/modulebuilder/index.php | 5 ++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/htdocs/core/lib/modulebuilder.lib.php b/htdocs/core/lib/modulebuilder.lib.php index c38448b452a..8076a990d26 100644 --- a/htdocs/core/lib/modulebuilder.lib.php +++ b/htdocs/core/lib/modulebuilder.lib.php @@ -63,11 +63,10 @@ function rebuildObjectClass($destdir, $module, $objectname, $newmask, $readdir = setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Label")), null, 'errors'); return -2; } - - if (! preg_match('/^(price|boolean|sellist|integer|date|timestamp|varchar|double|text|html)/', $addfieldentry['type'])) - + if (! preg_match('/^(price|sellist|date|varchar|double|text|html)/', $addfieldentry['type']) + && ! preg_match('/^(boolean|integer|real|timestamp)$/', $addfieldentry['type'])) { - setEventMessages($langs->trans('BadFormatForType', $objectname), null, 'errors'); + setEventMessages($langs->trans('BadValueForType', $objectname), null, 'errors'); return -2; } } diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index a3e746bb3b8..b80977decd8 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -836,7 +836,10 @@ if ($dirins && $action == 'addproperty' && !empty($module) && ! empty($tabobj)) if (! $error) { $object=rebuildObjectClass($destdir, $module, $objectname, $newmask, $srcdir, $addfieldentry); - if (is_numeric($result) && $result <= 0) $error++; + if (is_numeric($object) && $object <= 0) + { + $error++; + } } // Edit sql with new properties From c0262f1e19d04e44b321738f7a253011afc5e8a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 28 Aug 2019 12:24:35 +0200 Subject: [PATCH 03/11] Fix type integer --- htdocs/core/lib/modulebuilder.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/modulebuilder.lib.php b/htdocs/core/lib/modulebuilder.lib.php index 8076a990d26..bca427e5df8 100644 --- a/htdocs/core/lib/modulebuilder.lib.php +++ b/htdocs/core/lib/modulebuilder.lib.php @@ -63,8 +63,8 @@ function rebuildObjectClass($destdir, $module, $objectname, $newmask, $readdir = setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Label")), null, 'errors'); return -2; } - if (! preg_match('/^(price|sellist|date|varchar|double|text|html)/', $addfieldentry['type']) - && ! preg_match('/^(boolean|integer|real|timestamp)$/', $addfieldentry['type'])) + if (! preg_match('/^(integer|price|sellist|date|varchar|double|text|html)/', $addfieldentry['type']) + && ! preg_match('/^(boolean|real|timestamp)$/', $addfieldentry['type'])) { setEventMessages($langs->trans('BadValueForType', $objectname), null, 'errors'); return -2; From f21cb54ae6f89d962ce20aacf8b55949db8cb46a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 28 Aug 2019 13:04:22 +0200 Subject: [PATCH 04/11] FIX management of extrafields in modulebuilder --- htdocs/modulebuilder/index.php | 81 +++++++++++++++---- .../llx_mymodule_myobject_extrafields.key.sql | 19 +++++ 2 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 htdocs/modulebuilder/template/sql/llx_mymodule_myobject_extrafields.key.sql diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index b80977decd8..d67fa08fafa 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -258,7 +258,6 @@ if ($dirins && $action == 'initapi' && !empty($module)) dolReplaceInFile($destfile, $arrayreplacement); } } - if ($dirins && $action == 'initphpunit' && !empty($module)) { $modulename = ucfirst($module); // Force first letter in uppercase @@ -297,7 +296,45 @@ if ($dirins && $action == 'initphpunit' && !empty($module)) } } +if ($dirins && $action == 'initsqlextrafields' && !empty($module)) +{ + $modulename = ucfirst($module); // Force first letter in uppercase + $objectname = $tabobj; + dol_mkdir($dirins.'/'.strtolower($module).'/sql'); + $srcdir = DOL_DOCUMENT_ROOT.'/modulebuilder/template'; + $srcfile1 = $srcdir.'/sql/llx_mymodule_myobject_extrafields.sql'; + $destfile1 = $dirins.'/'.strtolower($module).'/sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.sql'; + //var_dump($srcfile);var_dump($destfile); + $result1 = dol_copy($srcfile1, $destfile1, 0, 0); + $srcfile2 = $srcdir.'/sql/llx_mymodule_myobject_extrafields.key.sql'; + $destfile2 = $dirins.'/'.strtolower($module).'/sql/llx_'.strtolower($module).'_'.strtolower($objectname).'_extrafields.key.sql'; + //var_dump($srcfile);var_dump($destfile); + $result2 = dol_copy($srcfile2, $destfile2, 0, 0); + + if ($result1 > 0 && $result2 > 0) + { + $modulename = ucfirst($module); // Force first letter in uppercase + + //var_dump($phpfileval['fullname']); + $arrayreplacement=array( + 'mymodule'=>strtolower($modulename), + 'MyModule'=>$modulename, + 'MYMODULE'=>strtoupper($modulename), + 'My module'=>$modulename, + 'my module'=>$modulename, + 'Mon module'=>$modulename, + 'mon module'=>$modulename, + 'htdocs/modulebuilder/template'=>strtolower($modulename), + '---Put here your own copyright and developer email---'=>dol_print_date($now, '%Y').' '.$user->getFullName($langs).($user->email?' <'.$user->email.'>':'') + ); + + dolReplaceInFile($destfile1, $arrayreplacement); + dolReplaceInFile($destfile2, $arrayreplacement); + } + + // TODO Enable in class the property $isextrafieldmanaged = 1 +} if ($dirins && $action == 'inithook' && !empty($module)) { dol_mkdir($dirins.'/'.strtolower($module).'/class'); @@ -1893,8 +1930,8 @@ elseif (! empty($module)) if ($realpathtoapi) { print ' '.img_picto($langs->trans("Edit"), 'edit').''; - print '   '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ' '; + print ''.img_picto($langs->trans("Delete"), 'delete').''; print '   '; if (empty($conf->global->$const_name)) // If module is not activated { @@ -1917,8 +1954,8 @@ elseif (! empty($module)) if ($realpathtophpunit) { print ' '.img_picto($langs->trans("Edit"), 'edit').''; - print '   '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ' '; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } else { @@ -1942,12 +1979,21 @@ elseif (! empty($module)) print '
'; print ' '.$langs->trans("SqlFile").' : '.($realpathtosql?'':'').$pathtosql.($realpathtosql?'':'').''; print ' '.img_picto($langs->trans("Edit"), 'edit').''; - print '   '.$langs->trans("DropTableIfEmpty").''; + print '   '.$langs->trans("DropTableIfEmpty").''; //print '   '.$langs->trans("RunSql").''; print '
'; print ' '.$langs->trans("SqlFileExtraFields").' : '.($realpathtosqlextra?'':'').$pathtosqlextra.($realpathtosqlextra?'':'').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; - print '   '.$langs->trans("DropTableIfEmpty").''; + if ($realpathtosqlextra) + { + print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '; + print ''.img_picto($langs->trans("Delete"), 'delete').''; + print '   '; + print ''.$langs->trans("DropTableIfEmpty").''; + } + else { + print ''; + } //print '   '.$langs->trans("RunSql").''; print '
'; print ' '.$langs->trans("SqlFileKey").' : '.($realpathtosqlkey?'':'').$pathtosqlkey.($realpathtosqlkey?'':'').''; @@ -1955,7 +2001,12 @@ elseif (! empty($module)) //print '   '.$langs->trans("RunSql").''; print '
'; print ' '.$langs->trans("SqlFileKeyExtraFields").' : '.($realpathtosqlextrakey?'':'').$pathtosqlextrakey.($realpathtosqlextrakey?'':'').''; - print ' '.img_picto($langs->trans("Edit"), 'edit').''; + if ($realpathtosqlextrakey) + { + print ' '.img_picto($langs->trans("Edit"), 'edit').''; + print ' '; + print ''.img_picto($langs->trans("Delete"), 'delete').''; + } //print '   '.$langs->trans("RunSql").''; print '
'; @@ -1976,24 +2027,24 @@ elseif (! empty($module)) print ' '.img_picto($langs->trans("Edit"), 'edit').''; if ($realpathtoagenda) { - print '   '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ' '; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } print '
'; print ' '.$langs->trans("PageForDocumentTab").' : '.($realpathtodocument?'':'').$pathtodocument.($realpathtodocument?'':'').''; print ' '.img_picto($langs->trans("Edit"), 'edit').''; if ($realpathtodocument) { - print '   '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ' '; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } print '
'; print ' '.$langs->trans("PageForNoteTab").' : '.($realpathtonote?'':'').$pathtonote.($realpathtonote?'':'').''; print ' '.img_picto($langs->trans("Edit"), 'edit').''; if ($realpathtonote) { - print '   '; - print ''.img_picto($langs->trans("Delete"), 'delete').''; + print ' '; + print ''.img_picto($langs->trans("Delete"), 'delete').''; } print '
'; diff --git a/htdocs/modulebuilder/template/sql/llx_mymodule_myobject_extrafields.key.sql b/htdocs/modulebuilder/template/sql/llx_mymodule_myobject_extrafields.key.sql new file mode 100644 index 00000000000..016117feebb --- /dev/null +++ b/htdocs/modulebuilder/template/sql/llx_mymodule_myobject_extrafields.key.sql @@ -0,0 +1,19 @@ +-- Copyright (C) ---Put here your own copyright and developer email--- +-- +-- 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 +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- 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 this program. If not, see http://www.gnu.org/licenses/. + + +-- BEGIN MODULEBUILDER INDEXES +ALTER TABLE llx_mymodule_myobject_extrafields ADD INDEX idx_fk_object(fk_object); +-- END MODULEBUILDER INDEXES From 85016a7a458f7c4949664120df541c36ead9f4f4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 28 Aug 2019 13:11:51 +0200 Subject: [PATCH 05/11] Fix bad error when module not enabled --- htdocs/core/actions_massactions.inc.php | 2 +- htdocs/modulebuilder/template/myobject_list.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index f474b1b05f8..d54d2dd02ff 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -39,7 +39,7 @@ // Protection if (empty($objectclass) || empty($uploaddir)) { - dol_print_error(null, 'include of actions_massactions.inc.php is done but var $massaction or $objectclass or $uploaddir was not defined'); + dol_print_error(null, 'include of actions_massactions.inc.php is done but var $objectclass or $uploaddir was not defined'); exit; } diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 11fafd59ab5..555e01d7896 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -107,6 +107,7 @@ if (! $sortfield) $sortfield="t.".key($object->fields); // Set here default se if (! $sortorder) $sortorder="ASC"; // Security check +if (empty($conf->mymodule->enabled)) accessforbidden('Module not enabled'); $socid=0; if ($user->societe_id > 0) // Protection if external user { From 9f775ca48083b3641276306837745ad6e14eec01 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 29 Aug 2019 01:37:19 +0200 Subject: [PATCH 06/11] Fix look and feel v10 --- htdocs/projet/ganttview.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index ba1e2f2994e..86e8d2dbde8 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -132,7 +132,7 @@ if (($id > 0 && is_numeric($id)) || ! empty($ref)) print '
'; print '
'; - print ''; + print '
'; // Visibility print '
'.$langs->trans("Visibility").''; @@ -166,7 +166,7 @@ if (($id > 0 && is_numeric($id)) || ! empty($ref)) print '
'; print '
'; - print ''; + print '
'; // Description print '
'.$langs->trans("Description").''; From 641a50a58b944083493d0b19f7ccabbcb9b8e0e5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 29 Aug 2019 03:51:58 +0200 Subject: [PATCH 07/11] Fix to reduce effect of Deny Of Service attacks --- htdocs/core/db/mysqli.class.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 98f2e5c5a1b..1470fb16f0c 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -247,7 +247,7 @@ class DoliDBMysqli extends DoliDB * Execute a SQL request and return the resultset * * @param string $query SQL query string - * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). + * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollback to savepoint if error (this allow to have some request with errors inside global transactions). * Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints. * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) * @return bool|mysqli_result Resultset of answer @@ -258,7 +258,11 @@ class DoliDBMysqli extends DoliDB $query = trim($query); - if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) dol_syslog('sql='.$query, LOG_DEBUG); + if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) + { + $SYSLOG_SQL_LIMIT = 10000; // limit log to 10kb per line to limit DOS attacks + dol_syslog('sql='.substr($query, 0, $SYSLOG_SQL_LIMIT), LOG_DEBUG); + } if (empty($query)) return false; // Return false = error if empty request if (! $this->database_name) From 6420a323959316284a6f5313418f8414b6053864 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 29 Aug 2019 03:54:31 +0200 Subject: [PATCH 08/11] Fix to reduce effect of Deny Of Service attacks --- htdocs/core/db/mssql.class.php | 6 +++++- htdocs/core/db/pgsql.class.php | 6 +++++- htdocs/core/db/sqlite3.class.php | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index efffd5059c6..3a5060e856e 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -419,7 +419,11 @@ class DoliDBMssql extends DoliDB } //print ""; - if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) dol_syslog('sql='.$query, LOG_DEBUG); + if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) + { + $SYSLOG_SQL_LIMIT = 10000; // limit log to 10kb per line to limit DOS attacks + dol_syslog('sql='.substr($query, 0, $SYSLOG_SQL_LIMIT), LOG_DEBUG); + } if (! $this->database_name) { diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index 2777f2d0365..b577ff29bf5 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -522,7 +522,11 @@ class DoliDBPgsql extends DoliDB @pg_query($this->db, 'SAVEPOINT mysavepoint'); } - if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) dol_syslog('sql='.$query, LOG_DEBUG); + if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) + { + $SYSLOG_SQL_LIMIT = 10000; // limit log to 10kb per line to limit DOS attacks + dol_syslog('sql='.substr($query, 0, $SYSLOG_SQL_LIMIT), LOG_DEBUG); + } $ret = @pg_query($this->db, $query); diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 360b72f80d9..24bb679f17b 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -453,7 +453,11 @@ class DoliDBSqlite3 extends DoliDB } //print "After convertSQLFromMysql:\n".$query."
\n"; - if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) dol_syslog('sql='.$query, LOG_DEBUG); + if (! in_array($query, array('BEGIN','COMMIT','ROLLBACK'))) + { + $SYSLOG_SQL_LIMIT = 10000; // limit log to 10kb per line to limit DOS attacks + dol_syslog('sql='.substr($query, 0, $SYSLOG_SQL_LIMIT), LOG_DEBUG); + } if (empty($query)) return false; // Return false = error if empty request // Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE) From 58fdfc25d2dfa5ef674204877dcf70a539aa134c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 29 Aug 2019 13:41:42 +0200 Subject: [PATCH 09/11] FIX Css was saved on wrong website. --- htdocs/website/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 36065bf8ba0..ef148ba609a 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -214,11 +214,11 @@ $htmlheadercontentdefault.='-->'."\n"; */ // Protections -if ($action == 'updatesource' && (GETPOST('refreshsite_x') || GETPOST('refreshsite.x') || GETPOST('refreshpage_x') || GETPOST('refreshpage.x'))) +if (GETPOST('refreshsite') || GETPOST('refreshsite_x') || GETPOST('refreshsite.x') || GETPOST('refreshpage') || GETPOST('refreshpage_x') || GETPOST('refreshpage.x')) { - $action = 'preview'; // To avoid to update another page or another site when we click on button to select another site or page. + $action = 'preview'; // To avoid to make an action on another page or another site when we click on button to select another site or page. } -if (GETPOST('refreshsite', 'alpha')) // If we change the site, we reset the pageid and cancel addsite action. +if (GETPOST('refreshsite', 'alpha') || GETPOST('refreshsite.x', 'alpha') || GETPOST('refreshsite_x', 'alpha')) // If we change the site, we reset the pageid and cancel addsite action. { $pageid=0; if ($action == 'addsite') $action = 'preview'; From 906506b74c38324525e48fc6523864be4ce4c9c1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 30 Aug 2019 04:14:45 +0200 Subject: [PATCH 10/11] Fix alignement of legend --- 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 4df7a6ba014..f1faa731f78 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3418,6 +3418,9 @@ div.dolgraph div.legend, div.dolgraph div.legend div { background-color: rgba(25 div.dolgraph div.legend table tbody tr { height: auto; } td.legendColorBox { padding: 2px 2px 2px 0 !important; } td.legendLabel { padding: 2px 2px 2px 0 !important; } +td.legendLabel { + text-align: ; +} label.radioprivate { white-space: nowrap; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 704610eca82..86beb45dce2 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3623,6 +3623,9 @@ div.dolgraph div.legend, div.dolgraph div.legend div { background-color: rgba(25 div.dolgraph div.legend table tbody tr { height: auto; } td.legendColorBox { padding: 2px 2px 2px 0 !important; } td.legendLabel { padding: 2px 2px 2px 0 !important; } +td.legendLabel { + text-align: ; +} label.radioprivate { white-space: nowrap; From e54dbecf6d4555f515c5825a28f374b715d67056 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 30 Aug 2019 04:17:40 +0200 Subject: [PATCH 11/11] Sync transifex --- htdocs/langs/fr_FR/admin.lang | 16 ++++++++-------- htdocs/langs/fr_FR/banks.lang | 2 ++ htdocs/langs/fr_FR/bills.lang | 2 +- htdocs/langs/fr_FR/cashdesk.lang | 8 +++++++- htdocs/langs/fr_FR/companies.lang | 1 + htdocs/langs/fr_FR/compta.lang | 2 +- htdocs/langs/fr_FR/contracts.lang | 3 +++ htdocs/langs/fr_FR/errors.lang | 1 + htdocs/langs/fr_FR/main.lang | 9 +++++++++ htdocs/langs/fr_FR/members.lang | 1 + htdocs/langs/fr_FR/products.lang | 6 +++--- htdocs/langs/fr_FR/projects.lang | 6 ++++++ htdocs/langs/fr_FR/website.lang | 19 +++++++++++++++---- 13 files changed, 58 insertions(+), 18 deletions(-) diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index ea029762214..7407396835b 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -400,6 +400,7 @@ OldVATRates=Ancien taux de TVA NewVATRates=Nouveau taux de TVA PriceBaseTypeToChange=Modifier sur les prix dont la référence de base est le MassConvert=Convertir en masse +PriceFormatInCurrentLanguage=Format de prix dans la langue actuelle String=Chaîne TextLong=Texte long HtmlText=Texte HTML @@ -431,7 +432,7 @@ ExtrafieldParamHelpradio=La liste doit être de la forme clef,valeur (où la cl ExtrafieldParamHelpsellist=Les paramètres de la liste viennent d'une table
Syntax : table_name:label_field:id_field::filter
Exemple : c_typent:libelle:id::filter

-idfilter est nécessairement une clé primaire int
- filter peut être un simple test (e.g. active=1) pour seulement montrer les valeurs actives
Vous pouvez aussi utiliser $ID$ dans le filtre qui est le ID actuel de l'objet
Pour faire un SELECT dans le filtre, utilisez $SEL$
Si vous voulez filtrer sur un extrafield, utilisez la syntaxe extra.fieldcode=... (ou fieldcode est le code de l'extrafield)

Pour avoir une liste qui dépend d'un autre attribut complémentaire:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

Pour avoir une liste qui dépend d'une autre liste:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Les paramètres de la liste proviennent d'une table
:Syntaxe : nom_de_la_table:libelle_champ:id_champ::filtre
Exemple : c_typent:libelle:id::filter

le filtre peut n'est qu'un test (ex : active=1) pour n'afficher que les valeurs actives.
Vous pouvez aussi utiliser $ID$ dans les filtres pour indiquer l'ID de l'élément courant.
Pour utiliser un SELECT dans un filtre, utilisez $SEL$
Pour filtrer sur un attribut supplémentaire, utilisez la syntaxeextra.fieldcode=... (ou fieldcode est le code de l'attribut supplémentaire)

Pour afficher une liste dépendant d'un autre attribut supplémentaire :
c_typent:libelle:id:options_code_liste_parente|colonne_parente:filtre

Pour afficher une liste dépendant d'une autre liste :
c_typent:libelle:id:code_liste_parente|colonne_parente:filter ExtrafieldParamHelplink=Les paramètres doivent être ObjectName:Classpath
Syntaxe: ObjectName:Classpath
Exemples:
Société:societe/class/societe.class.php
Contact:contact/class/contact.class.php -ExtrafieldParamHelpSeparator=Garder vide pour un simple séparateur
Définissez-le sur 1 pour un séparateur accordéon (ouvert par défaut)
Définissez-le sur 2 pour un séparateur accordéon (réduit par défaut) +ExtrafieldParamHelpSeparator=Garder vide pour un simple séparateur
Définissez-le sur 1 pour un séparateur auto-déroulant (ouvert par défaut pour une nouvelle session, puis le statut est conservé pour la session de l'utilisateur)
Définissez ceci sur 2 pour un séparateur auto-déroulant (réduit par défaut pour une nouvelle session, puis l'état est conservé pour chaque session d'utilisateur). LibraryToBuildPDF=Bibliothèque utilisée pour la génération des PDF LocalTaxDesc=Certains pays appliquent 2 voire 3 taux sur chaque ligne de facture. Si c'est le cas, choisissez le type du deuxième et troisième taux et sa valeur. Les types possibles sont:
1 : taxe locale sur les produits et services hors tva (la taxe locale est calculée sur le montant hors taxe)
2 : taxe locale sur les produits et services avant tva (la taxe locale est calculée sur le montant + tva)
3 : taxe locale uniquement sur les produits hors tva (la taxe locale est calculée sur le montant hors taxe)
4 : taxe locale uniquement sur les produits avant tva (la taxe locale est calculée sur le montant + tva)
5 : taxe locale uniquement sur les services hors tva (la taxe locale est calculée sur le montant hors taxe)
6 : taxe locale uniquement sur les service avant tva (la taxe locale est calculée sur le montant + tva) SMS=SMS @@ -1695,7 +1696,7 @@ SuppliersInvoiceNumberingModel=Modèles de numérotation des factures fournisseu IfSetToYesDontForgetPermission=Si positionné sur Oui, n'oubliez pas de donner les permissions aux groupes ou utilisateurs qui auront le droit de cette action. ##### GeoIPMaxmind ##### GeoIPMaxmindSetup=Configuration du module GeoIP Maxmind -PathToGeoIPMaxmindCountryDataFile=Chemin du fichier Maxmind contenant les conversions IP->Pays.
Exemples
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat +PathToGeoIPMaxmindCountryDataFile=Chemin du fichier Maxmind contenant les conversions IP->Pays.
Exemples
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoLite2-Country.mmdb NoteOnPathLocation=Notez que ce fichier doit être dans un répertoire accessible à votre PHP (Vérifiez le paramètre open_basedir de votre PHP et les permissions du fichier/répertoires). YouCanDownloadFreeDatFileTo=Vous pouvez télécharger une version démo gratuite de la base Maxmind à l'adresse %s. YouCanDownloadAdvancedDatFileTo=Vous pouvez aussi télécharger une version plus complète avec mise à jours de la base Maxmind à l'adresse %s. @@ -1926,14 +1927,13 @@ SmallerThan=Plus petit que LargerThan=Plus grand que IfTrackingIDFoundEventWillBeLinked=Notez que si un ID de suivi est trouvé dans le courrier électronique entrant, l'événement sera automatiquement lié aux bons objets. WithGMailYouCanCreateADedicatedPassword=Avec un compte GMail, si vous avez activé la validation en 2 étapes, il est recommandé de créer un deuxième mot de passe dédié à l'application, au lieu d'utiliser votre propre mot de passe de compte, à partir de https://myaccount.google.com/. -IFTTTSetup=Configuration du module IFTTT -IFTTT_SERVICE_KEY=Clé de service IFTTT -IFTTT_DOLIBARR_ENDPOINT_SECUREKEY=Clé de sécurité pour sécuriser l'URL du point de terminaison utilisé par IFTTT pour envoyer des messages à votre Dolibarr. -IFTTTDesc=Ce module est conçu pour déclencher des événements sur IFTTT et/ou pour exécuter une action sur des déclencheurs IFTTT externes. -UrlForIFTTT=URL endpoint pour IFTTT -YouWillFindItOnYourIFTTTAccount=Vous le trouverez sur votre compte IFTTT EndPointFor=Endpoint pour %s: %s DeleteEmailCollector=Supprimer le collecteur d'email ConfirmDeleteEmailCollector=Êtes-vous sûr de vouloir supprimer ce collecteur d'email ? RecipientEmailsWillBeReplacedWithThisValue=Les emails des destinataires seront toujours remplacés par cette valeur AtLeastOneDefaultBankAccountMandatory=Au moins 1 compte bancaire par défaut doit être défini +RESTRICT_API_ON_IP=Autoriser les API disponibles sur certaines adresses IP uniquement (les caractères génériques ne sont pas autorisés, utilisez un espace entre les valeurs). Vide signifie que tous les hôtes peuvent utiliser les API disponibles. +RESTRICT_ON_IP=Autoriser l'accès à certaines adresses IP d'hôte uniquement (les caractères génériques ne sont pas autorisés, utilisez un espace entre les valeurs). Vide signifie que tous les hôtes peuvent accéder. +BaseOnSabeDavVersion=Basé sur la version de bibliothèque SabreDAV +NotAPublicIp=Pas une IP publique +MakeAnonymousPing=Effectuez un ping «+1» anonyme sur le serveur de la fondation Dolibarr (une seule fois après l’installation) pour permettre à la fondation de compter le nombre d’installations de Dolibarr. diff --git a/htdocs/langs/fr_FR/banks.lang b/htdocs/langs/fr_FR/banks.lang index c87bf67ad9d..a2fb4b58aa7 100644 --- a/htdocs/langs/fr_FR/banks.lang +++ b/htdocs/langs/fr_FR/banks.lang @@ -73,6 +73,7 @@ BankTransaction=Écriture bancaire ListTransactions=Liste écritures ListTransactionsByCategory=Liste écritures/catégories TransactionsToConciliate=Écritures à rapprocher +TransactionsToConciliateShort=A rapprocher Conciliable=Rapprochable Conciliate=Rapprocher Conciliation=Rapprochement @@ -116,6 +117,7 @@ DeleteCheckReceipt=Supprimer ce bordereau de remise ? ConfirmDeleteCheckReceipt=Êtes-vous sûr de vouloir supprimer ce bordereau ? BankChecks=Chèques BankChecksToReceipt=Chèques à déposer +BankChecksToReceiptShort=Chèques à déposer ShowCheckReceipt=Afficher bordereau remise chèque NumberOfCheques=Nombre de chèques DeleteTransaction=Supprimer l'écriture diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index fefc478c146..bdf515ca297 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -142,7 +142,7 @@ BillShortStatusStarted=Commencée BillShortStatusNotPaid=Impayée BillShortStatusNotRefunded=Non remboursé BillShortStatusClosedUnpaid=Fermée -BillShortStatusClosedPaidPartially=Payée +BillShortStatusClosedPaidPartially=Payée (partiellement) PaymentStatusToValidShort=A valider ErrorVATIntraNotConfigured=Numéro de TVA intracommunautaire non encore défini ErrorNoPaiementModeConfigured=Aucun mode de règlement défini par défaut. Allez corriger dans la configuration du module facture. diff --git a/htdocs/langs/fr_FR/cashdesk.lang b/htdocs/langs/fr_FR/cashdesk.lang index 25465ebc4b2..1b4aeaa817b 100644 --- a/htdocs/langs/fr_FR/cashdesk.lang +++ b/htdocs/langs/fr_FR/cashdesk.lang @@ -38,7 +38,7 @@ CloseBill=Fermer la facture Floors=Etages Floor=Etage AddTable=Ajouter une table -Place=Marché +Place=Emplacement TakeposConnectorNecesary='Connecteur TakePOS' requis OrderPrinters=Commande imprimantes SearchProduct=Rechercher un produit @@ -62,6 +62,7 @@ TicketVatGrouped=Grouper la TVA par taux sur les tickets AutoPrintTickets=Imprimer automatiquement les tickets EnableBarOrRestaurantFeatures=Activer les fonctionnalités pour bar ou restaurant ConfirmDeletionOfThisPOSSale=Confirmez-vous la suppression de cette vente en cours? +ConfirmDiscardOfThisPOSSale=Voulez-vous vous écarter cette vente en cours? History=Historique ValidateAndClose=Valider et fermer Terminal=Terminal @@ -69,3 +70,8 @@ NumberOfTerminals=Nombre de terminaux TerminalSelect=Sélectionnez le terminal que vous souhaitez utiliser: POSTicket=Ticket POS BasicPhoneLayout=Utiliser une interface basique pour les smartphones +SetupOfTerminalNotComplete=La configuration du terminal %s n'est pas terminée +DirectPayment=Paiement direct +DirectPaymentButton=Bouton de paiement direct en espèces +InvoiceIsAlreadyValidated=La facture est déjà validée +NoLinesToBill=Aucune ligne à facturer diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index 8f39b8ce7a9..48a489c7c80 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -54,6 +54,7 @@ Firstname=Prénom PostOrFunction=Poste/fonction UserTitle=Titre civilité NatureOfThirdParty=Nature de tiers +NatureOfContact=Nature du contact Address=Adresse State=Département / Canton StateShort=Département diff --git a/htdocs/langs/fr_FR/compta.lang b/htdocs/langs/fr_FR/compta.lang index 0381183468c..d557f85e726 100644 --- a/htdocs/langs/fr_FR/compta.lang +++ b/htdocs/langs/fr_FR/compta.lang @@ -206,7 +206,7 @@ DescSellsJournal=Journal des ventes DescPurchasesJournal=Journal des achats CodeNotDef=Non défini WarningDepositsNotIncluded=Les factures d'acomptes ne sont pas encore prises en compte dans cette version avec ce module de comptabilité. -DatePaymentTermCantBeLowerThanObjectDate=La date limite de règlement ne peut être inférieure à la date de l'object +DatePaymentTermCantBeLowerThanObjectDate=La date limite de règlement ne peut être inférieure à la date de l'objet Pcg_version=Modèle de plan de compte Pcg_type=Classe de compte Pcg_subtype=Sous classe de compte diff --git a/htdocs/langs/fr_FR/contracts.lang b/htdocs/langs/fr_FR/contracts.lang index 491ab0e384e..2372c9bec3f 100644 --- a/htdocs/langs/fr_FR/contracts.lang +++ b/htdocs/langs/fr_FR/contracts.lang @@ -51,6 +51,7 @@ ListOfClosedServices=Liste des services fermés ListOfRunningServices=Liste des services actifs NotActivatedServices=Services non activés (parmi les contrats validés) BoardNotActivatedServices=Services à activer en contrat validé +BoardNotActivatedServicesShort=Services à activer LastContracts=Les %s derniers contrats LastModifiedServices=Les %s derniers produits/services modifiés ContractStartDate=Date début @@ -65,7 +66,9 @@ DateEndReal=Date effective fin de service DateEndRealShort=Date effective fin CloseService=Fermer service BoardRunningServices=Services actifs +BoardRunningServicesShort=Services actifs BoardExpiredServices=Services expirés +BoardExpiredServicesShort=Services expirés ServiceStatus=Statut du service DraftContracts=Contrats brouillons CloseRefusedBecauseOneServiceActive=Le contrat ne peut pas être fermé car il y a au moins un service ouvert dessus diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang index b1180581b42..0060e85f2e4 100644 --- a/htdocs/langs/fr_FR/errors.lang +++ b/htdocs/langs/fr_FR/errors.lang @@ -218,6 +218,7 @@ ErrorVariableKeyForContentMustBeSet=Erreur, la constante nommée %s (avec le con ErrorURLMustStartWithHttp=L'URL %s doit commencer par http:// ou https:// ErrorNewRefIsAlreadyUsed=Erreur, la nouvelle référence est déjà utilisée ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Erreur, supprimer le paiement lié à une facture clôturée n'est pas possible. +ErrorSearchCriteriaTooSmall=Critère de recherche trop petit. # Warnings WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Votre paramètre PHP upload_max_filesize (%s) est supérieur au paramètre PHP post_max_size (%s). Ceci n'est pas une configuration cohérente. WarningPasswordSetWithNoAccount=Un mot de passe a été fixé pour cet adhérent. Cependant, aucun compte d'utilisateur n'a été créé. Donc, ce mot de passe est stocké, mais ne peut être utilisé pour accéder à Dolibarr. Il peut être utilisé par un module/interface externe, mais si vous n'avez pas besoin de définir ni login ni mot de passe pour un adhérent, vous pouvez désactiver l'option «Gérer un login pour chaque adhérent" depuis la configuration du module Adhérents. Si vous avez besoin de gérer un login, mais pas de mot de passe, vous pouvez laisser ce champ vide pour éviter cet avertissement. Remarque: L'email peut également être utilisé comme login si l'adhérent est lié à un utilisateur. diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 822a924df1a..a690bf2801e 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -28,6 +28,7 @@ NoTemplateDefined=Pas de modèle défini pour ce type d'email AvailableVariables=Variables de substitution disponibles NoTranslation=Pas de traduction Translation=Traduction +EmptySearchString=Entrez une chaîne de recherche non vide NoRecordFound=Aucun enregistrement trouvé NoRecordDeleted=Aucun enregistrement supprimé NotEnoughDataYet=Pas assez de données @@ -704,6 +705,7 @@ DateOfSignature=Date de signature HidePassword=Afficher commande avec mot de passe masqué UnHidePassword=Afficher commande réelle avec mot de passe en clair Root=Racine +RootOfMedias=Racine des médias publics (/medias) Informations=Information Page=Page Notes=Notes @@ -981,3 +983,10 @@ PaymentInformation=Information de paiement ValidFrom=Valide à partir de ValidUntil=Valide jusqu'au NoRecordedUsers=Aucun utilisateur +ToClose=A fermer +ToProcess=À traiter +ToApprove=A approuver +GlobalOpenedElemView=Vue globale +NoArticlesFoundForTheKeyword=Aucun article trouvé pour le mot clé '%s' +NoArticlesFoundForTheCategory=Aucun article trouvé pour la catégorie +ToAcceptRefuse=Accepter | Refuser diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index dfc874bab79..d70bb3139f0 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -29,6 +29,7 @@ MenuMembersUpToDate=Adhérents à jour MenuMembersNotUpToDate=Adhérents non à jour MenuMembersResiliated=Adhérents résiliés MembersWithSubscriptionToReceive=Adhérents avec cotisation à recevoir +MembersWithSubscriptionToReceiveShort=Cotisations à recevoir DateSubscription=Date adhésion DateEndSubscription=Date fin adhésion EndSubscription=Fin adhésion diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index 097e2e3fc8d..bb7d656fe27 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -29,12 +29,12 @@ ProductOrService=Produit ou Service ProductsAndServices=Produits et Services ProductsOrServices=Produits ou Services ProductsPipeServices=Produits | Services -ProductsOnSaleOnly=Uniquement produits en vente +ProductsOnSaleOnly=Produits en vente uniquement ProductsOnPurchaseOnly=Produits seulement en achat ProductsNotOnSell=Produits hors vente et hors achat ProductsOnSellAndOnBuy=Produits en vente et en achat -ServicesOnSaleOnly=Uniquement services en vente -ServicesOnPurchaseOnly=Uniquement services à acheter +ServicesOnSaleOnly=Services en vente uniquement +ServicesOnPurchaseOnly=Services en achat uniquement ServicesNotOnSell=Services hors vente et hors achat ServicesOnSellAndOnBuy=Services en vente et en achat LastModifiedProductsAndServices=Les %s derniers produits/services modifiés diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang index 5c50b1e2c40..00c66c59002 100644 --- a/htdocs/langs/fr_FR/projects.lang +++ b/htdocs/langs/fr_FR/projects.lang @@ -76,7 +76,13 @@ MyProjects=Mes projets MyProjectsArea=Espace Mes projets DurationEffective=Durée effective ProgressDeclared=Progression déclarée +TaskProgressSummary=Progression de tâche +CurentlyOpenedTasks=Tâches actuellement ouvertes +TheReportedProgressIsLessThanTheCalculatedProgressionByX=La progression déclarée est inférieure à %s à la progression calculée. +TheReportedProgressIsMoreThanTheCalculatedProgressionByX=La progression déclarée est plus %s que la progression calculée ProgressCalculated=Progression calculée +WhichIamLinkedTo=dont je suis contact +WhichIamLinkedToProject=dont je suis contact de projet Time=Temps ListOfTasks=Liste de tâches GoToListOfTimeConsumed=Aller à la liste des temps consommés diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang index 0bf16fbb663..0858738f1fb 100644 --- a/htdocs/langs/fr_FR/website.lang +++ b/htdocs/langs/fr_FR/website.lang @@ -2,7 +2,7 @@ Shortname=Code WebsiteSetupDesc=Créez ici les sites Web que vous souhaitez utiliser. Ensuite, allez dans le menu Sites Web pour les éditer. DeleteWebsite=Effacer site web -ConfirmDeleteWebsite=Êtes-vous sûr de vouloir supprimer ce site web. Toutes les pages et le contenu seront également supprimés. +ConfirmDeleteWebsite=Êtes-vous sûr de vouloir supprimer ce site web. Toutes les pages et le contenu seront également supprimés. Les fichiers téléversés (comme ceux dans le répertoire medias, dans le module GED, ...) seront conservés. WEBSITE_TYPE_CONTAINER=Type de page / container WEBSITE_PAGE_EXAMPLE=Page Web à utiliser comme exemple WEBSITE_PAGENAME=Nom/alias de la page @@ -14,6 +14,9 @@ WEBSITE_JS_INLINE=Contenu du fichier Javascript (commun à toutes les pages) WEBSITE_HTML_HEADER=Ajout en bas de l'en-tête HTML (commun à toutes les pages) WEBSITE_ROBOT=Fichier robot (robots.txt) WEBSITE_HTACCESS=Fichier .htaccess du site web +WEBSITE_MANIFEST_JSON=Fichier manifest.json de site Web +WEBSITE_README=Fichier README.md +EnterHereLicenseInformation=Entrez ici les métadonnées ou les informations de licence pour créer un fichier README.md. Si vous distribuez votre site Web en tant que modèle, le fichier sera inclus dans le package. HtmlHeaderPage=En-tête HTML (spécifique pour la page uniquement) PageNameAliasHelp=Nom ou alias de la page.
Cet alias est également utilisé pour forger une URL SEO lorsque le site Web est exécuté à partir d'un hôte virtuel d'un serveur Web (comme Apache, Nginx, ...). Utilisez le bouton "%s" pour modifier cet alias. EditTheWebSiteForACommonHeader=Remarque: Si vous souhaitez définir un en-tête personnalisé pour toutes les pages, modifiez l'en-tête au niveau du site plutôt qu'au niveau page/container. @@ -41,6 +44,7 @@ RealURL=URL réelle ViewWebsiteInProduction=Pré-visualiser le site web en utilisant l'URL de la page d'accueil SetHereVirtualHost= Utilisation avec Apache/NGinx/...
Si vous pouvez créer sur votre serveur Web (Apache, Nginx, ...) un hôte virtuel dédié avec PHP activé et un répertoire racine sur
%s
alors entrez le nom de l'hôte virtuel que vous avez créé dans les propriétés du site, ainsi l'aperçu pourra être fait en utilisant cette URL pour un accès via le serveur Web dédié plutôt que via le serveur interne Dolibarr. YouCanAlsoTestWithPHPS= Utilisation avec un serveur PHP incorporé
Sous environnement de développement, vous pouvez préférer tester le site avec le serveur Web PHP intégré (PHP 5.5 requis) en exécutant
php -S 0.0.0.0:8080 -t %s +YouCanAlsoDeployToAnotherWHP=Exécutez votre site Web avec un autre fournisseur d'hébergement Dolibarr
Si vous ne disposez pas d'un serveur Web tel qu'Apache ou NGinx sur Internet, vous pouvez exporter et importer votre site Web vers une autre instance de Dolibarr fournie par un autre fournisseur d'hébergement Dolibarr offrant une intégration complète avec le module de site Web. Vous pouvez trouver une liste de certains hébergeurs Dolibarr sur https://saas.dolibarr.org CheckVirtualHostPerms=Vérifiez également que le virtual host a la permission %s sur les fichiers dans %s ReadPerm=Lire WritePerm=Écrire @@ -75,7 +79,8 @@ AddWebsiteAccount=Créer un compte de site web BackToListOfThirdParty=Retour à la liste pour le Tiers DisableSiteFirst=Désactiver le site Web d'abord MyContainerTitle=Titre de mon site web -AnotherContainer=Un autre container +AnotherContainer=Voici comment inclure le contenu d'une autre page/conteneur (vous pouvez avoir une erreur ici si vous activez le code dynamique car le sous-conteneur incorporé peut ne pas exister) +SorryWebsiteIsCurrentlyOffLine=Désolé, ce site est actuellement hors ligne. Merci de revenir plus tard ... WEBSITE_USE_WEBSITE_ACCOUNTS=Activer la table des comptes du site Web WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Activer la table pour stocker les comptes de site Web (login / pass) pour chaque site web / tiers YouMustDefineTheHomePage=Vous devez d'abord définir la page d'accueil par défaut @@ -89,7 +94,8 @@ AliasPageAlreadyExists=L'alias de page %s existe déjà CorporateHomePage=Page d'accueil Entreprise EmptyPage=Page vide ExternalURLMustStartWithHttp=l'URL externe doit commencer par http:// ou https:// -ZipOfWebsitePackageToImport=Fichier zip du package site Web +ZipOfWebsitePackageToImport=Téléverser le fichier Zip du package de modèles de site Web +ZipOfWebsitePackageToLoad=ou Choisissez un modèle de site Web fourni disponible ShowSubcontainers=Inclure contenu dynamique InternalURLOfPage=URL interne de la page ThisPageIsTranslationOf=Cette page/container est la traduction de @@ -101,5 +107,10 @@ NotAllowedToAddDynamicContent=Vous n'êtes pas autorisé à ajouter ou modifier ReplaceWebsiteContent=Rechercher ou remplacer un contenu du site DeleteAlsoJs=Supprimer également tous les fichiers javascript spécifiques à ce site? DeleteAlsoMedias=Supprimer également tous les fichiers médias spécifiques à ce site? -# Export MyWebsitePages=Mes pages de site web +SearchReplaceInto=Rechercher | Remplacer dans +ReplaceString=Nouvelle chaîne +CSSContentTooltipHelp=Entrez ici le contenu CSS. Pour éviter tout conflit avec le CSS de l'application, veillez à ajouter toutes les déclarations avec la classe .bodywebsite. Par exemple:

#mycssselector, input.myclass: survol {...}
doit être
.bodywebsite #mycssselector, .bodywebsite input.myclass: hover {...}

Remarque: Si vous avez un fichier volumineux sans ce préfixe, vous pouvez utiliser 'lessc' pour le convertir afin d'ajouter le préfixe .bodywebsite partout. +LinkAndScriptsHereAreNotLoadedInEditor=Avertissement: Ce contenu est affiché uniquement lorsque le site est accessible depuis un serveur. Il n'est pas utilisé en mode édition. Par conséquent, si vous devez charger des fichiers javascript également en mode édition, ajoutez simplement la balise 'script src=...' dans la page. +Dynamiccontent=Exemple de page à contenu dynamique +ImportSite=Importer modèle de site web